发现

这是我在做头像上传功能时发现的,下面是图片上传的业务逻辑。

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的更多相关文章

  1. laravel之Storage

    学习laravel一段时间了,从最开始文件保存到本地直到oss都使用原生或接口.今天偶尔看到了Storage.正好项目中有用到就在项目上使用了. 1.下载安装库 composer require ja ...

  2. Facebook网络模拟测试工具ATC使用

    Facebook在其工程博客(原文)上宣布开源移动网络测试工具Augmented Traffic Control(ATC),我迅速试用了一番,非常不错,对手游或者其他APP的调试和测试都非常有帮助,介 ...

  3. OpenStack Swift集群部署流程与简单使用

    之前介绍了<OpenStack Swift All In One安装部署流程与简单使用>,那么接下来就说一说Swift集群部署吧. 1. 简介 本文档详细描述了使用两台PC部署一个小型Sw ...

  4. Django Model field reference

    ===================== Model field reference ===================== .. module:: django.db.models.field ...

  5. flask 未完待续

    Flask - 一个短小精悍.可扩展的一个Web框架很多可用的第三方组件:http://flask.pocoo.org/extensions/blogs:https://www.cnblogs.com ...

  6. Django文件存储(二)定制存储系统

    要自己写一个存储系统,可以依照以下步骤: 1.写一个继承自django.core.files.storage.Storage的子类. from django.core.files.storage im ...

  7. 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 ...

  8. [js]BOM篇

    一.什么是BOM BOM(Browser Object Model)即浏览器对象模型. BOM提供了独立于内容 而与浏览器窗口进行交互的对象: 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对 ...

  9. [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 ...

随机推荐

  1. mysql 存储过程 事务处理 (转)

    BEGIN DECLARE t_error INTEGER DEFAULT 0;  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; S ...

  2. bzoj 3779 重组病毒 —— LCT+树状数组(区间修改+区间查询)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3779 RELEASE操作可以对应LCT的 access,RECENTER则是 makeroo ...

  3. php时间 显示刚刚 几分钟前等

    功能示例: $now = time();foreach($sys_res as $k => $v){ $day = intval(floor(($now - $v->system_time ...

  4. laravel修改命名空间中的App为各自项目的名称(个人喜好)

    学习源头:https://blog.csdn.net/xx1129244705/article/details/77965618 laravel框架的应用默认命名空间是App,修改命名空间的可通过ap ...

  5. git忽略一些提交上传的文件

    在项目开发的过程中有两种文件是不需要提交的. 1.一些很重要的配置文件 包括服务器地址 账号密码 数据库密码 公私钥等等 2.一些由于开发和沙箱环境和线上环境的差异 不能使用同一个时候 需要同一个文件 ...

  6. 011. 解决VS2015中CS1528: Expected ; or = (cannot specify constructor arguments in declaration)

    编译器错误消息: CS1528: Expected ; or = (cannot specify constructor arguments in declaration) 源错误:   行 94: ...

  7. SSH开发中的注解使用

    在SSH中使用注解可以减少配置XML文件,毕竟随着项目规模的扩大,配置bean将把Spring的配置文件(applicationContext.xml)变得很混乱 在Spring的配置文件中开启注解扫 ...

  8. 如何正确且成功破解跨平台数据库管理工具DbVisualizer?(图文详解)

    前期博客 基于JDBC的跨平台数据库管理工具DbVisualizer安装步骤(图文详解)(博主推荐) 上图,所示,说明这个还只是免费版而已,没又破解为Pro版本. 接下来,就是带领大家如何正确且成功破 ...

  9. 转:Python正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  10. 华为部分真机调试无法显示log问题解决

    真机测试时,部分华为手机无法获取全部的log信息.或者说无法获取Error以下级别的log信息.比如P7 这是因为部分华为机出厂默认log设置为关闭状态,因此只能获取Error以上级别的log信息.蛋 ...