奇妙的 Storage::url
发现
这是我在做头像上传功能时发现的,下面是图片上传的业务逻辑。
class AvatarController extends Controller
{
public function update(Request $request)
{
$this->validate($request, [
'avatar' => 'required|image|dimensions:max_width=400,max_height=400',
], [
'avatar.required' => '请先选择上传的头像。',
'avatar.dimensions' => '上传头像的宽高都不能大于 400 像素。',
]);
$avatar = $request->file('avatar');
if ($avatar->isValid()) {
$user = Auth::user();
$path = Storage::putFile('public/uploads/avatars', $avatar);
$user->avatar = Storage::url($path);
$user->save();
}
return back();
}
}
$avatar 是从页面接收过来的头像图片。你可能从未想过,短短三行代码就实现了图片上传:
$path = Storage::putFile('public/uploads/avatars', $avatar);
$user->avatar = Storage::url($path);
$user->save();
保存图片
如果没有使用 disk 方法指定「硬盘」,Storage 门面默认使用的硬盘就是 local,对应存储路径是 storage/app。所以
$path = Storage::putFile('public/uploads/avatars', $avatar);
产生的上传路径($path)的值类似:public/uploads/avatars/iT8Lg6mmF8qtlskbl54tlsNlYmJLLZnAZzkZsFJH.png,图片实际存储的位置在 /path/to/myapp/storage/app/public/uploads/avatars/iT8Lg6mmF8qtlskbl54tlsNlYmJLLZnAZzkZsFJH.png。
生成图片 URL
黑科技来了。你知道 Storage::url($path) 会产生什么结果吗?答案揭晓——/storage/uploads/avatars/iT8Lg6mmF8qtlskbl54tlsNlYmJLLZnAZzkZsFJH.png。
Oops!$path 的 「public」被去掉,然后在头部加了 /storage。这就是 Laravel 的 careful。
访问图片
<img src="{{ asset(Auth::user()->avatar) }}" alt="用户头像">
奇妙的 Storage::url的更多相关文章
- laravel之Storage
学习laravel一段时间了,从最开始文件保存到本地直到oss都使用原生或接口.今天偶尔看到了Storage.正好项目中有用到就在项目上使用了. 1.下载安装库 composer require ja ...
- Facebook网络模拟测试工具ATC使用
Facebook在其工程博客(原文)上宣布开源移动网络测试工具Augmented Traffic Control(ATC),我迅速试用了一番,非常不错,对手游或者其他APP的调试和测试都非常有帮助,介 ...
- OpenStack Swift集群部署流程与简单使用
之前介绍了<OpenStack Swift All In One安装部署流程与简单使用>,那么接下来就说一说Swift集群部署吧. 1. 简介 本文档详细描述了使用两台PC部署一个小型Sw ...
- Django Model field reference
===================== Model field reference ===================== .. module:: django.db.models.field ...
- flask 未完待续
Flask - 一个短小精悍.可扩展的一个Web框架很多可用的第三方组件:http://flask.pocoo.org/extensions/blogs:https://www.cnblogs.com ...
- Django文件存储(二)定制存储系统
要自己写一个存储系统,可以依照以下步骤: 1.写一个继承自django.core.files.storage.Storage的子类. from django.core.files.storage im ...
- CentOS7 安装kylin2.6.0集群
1. 环境准备 zookeeper3.4.12 mysql5.7 hive2.3.4 hadoop2.7.3 JDK1.8 hbase1.3.3 2. 集群规划 ip地址 机器名 角色 192.168 ...
- [js]BOM篇
一.什么是BOM BOM(Browser Object Model)即浏览器对象模型. BOM提供了独立于内容 而与浏览器窗口进行交互的对象: 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对 ...
- [Windows Azure] Configuring and Deploying the Windows Azure Email Service application - 2 of 5
Configuring and Deploying the Windows Azure Email Service application - 2 of 5 This is the second tu ...
随机推荐
- ubantu 安装tree命令
前提:必须安装好VMware tools 在linux系统中找不到tree这个命令时,需要安装,如ubuntu用下面的命令就可以安装tree这个命令工具,其他linux系统类似. 1 sudo apt ...
- FastAdmin 一键 CRUD 生成时方法不存在的问题分析
FastAdmin 一键 CRUD 生成时方法不存在的问题分析 有群友反馈 使用 一键 CRUD 生成时不成功. 我试了以下命令 php think crud -t test -u 1 是成功的. 再 ...
- STM32高级定时器用于普通定时,定时周期变长
最近在用stm32定时器控制步进电机,由于普通定时器不够用,只能把TIM1当普通定时器用,我随手就把普通定时器的代码搬过去. void cs_Timer_Init(void) //TIM1 us级 { ...
- Qt5.4中遇到找不到头文件<QApplication>等。
从新学习Qt时,重装了Qt5.4,当运行Hello World例子时,遇到了下列的情况 <span style="font-size:18px;">#include & ...
- 【转】Apache Jmeter发送post请求
下面用Jmeter发送一个post请求, 对应的js代码如下: $("#register_a").click(function() { var name = $("#un ...
- 杂项-公司-百科:伯克希尔·哈撒韦-un
ylbtech-杂项-公司-百科:伯克希尔·哈撒韦 伯克希尔·哈撒韦公司由沃伦·巴菲特(Warren Buffett)创建于1956年,是一家主营保险业务,在其他许多领域也有商业活动的公司.其中最重要 ...
- 安装ElasticSearch客户端Kibana
安装Kibana Kibana是一个为 ElasticSearch 提供的数据分析的 Web 接口.可使用它对日志进行高效的搜索.可视化.分析等各种操作. wget https://artifacts ...
- java 最差实践
HashMap size 陷阱: 错误写法: Map map = new HashMap(collection.size()); for (Object o : collection) { map.p ...
- 3 SpringBoot与微服务
SpringBoot的使用? 化繁为简: Spring MVC 需要定义各种配置,配置文件多. SpringBoot的核心功能? 独立运行: java -jar XXX.jar (以前启动SPring ...
- Unity3D的坑系列:你真想发布WinPhone版吗?
Unity 4.2加入了支持WinPhone发布,本来是一件令人开心的事情,不过最近听了Unity技术支持的一个事情后就发现,原来发布WinPhone版也是一个坑. 实际上如果你用Unity做小游戏发 ...