美文网首页
关于 `storage:link` Artisan 命令的一些思

关于 `storage:link` Artisan 命令的一些思

作者: 晨曦入诗 | 来源:发表于2018-10-06 20:50 被阅读3次

在 Laravel 中,要访问上传到本地的文件资源,需要先创建一个软连接。使用 storage:link Artisan 命令就可以快速创建这个软连接。

php artisan storage:link

命令执行完之后,就会在项目里多一个 public/storage ,这个 storage 就是一个软连接,它指向 storage/app/public 目录。

public/storage (软连接) → storage/app/public

目录结构是这样的。

public/
├── storage(软连接,指向目录 'storage/app/public')
├── css/
│   └── bootstrap.css
└── js/
     └── bootstrap.js

storage/
    └── app/
         └── public/
                 └── user-avatar.png

一、为何要创建软连接?

项目根目录下的 public 是一个特殊目录——存放可公共访问的资源。就像你看到的,除了 storage 这个软连接,还有 CSS 和 JS 文件都放在这里。如果你的域名是 may.app , 那么访问这些资源的 URL 如下:

细心的你会发现, http://my.app/storage/user-avatar.png 实际访问的文件资源的服务器地址是 /path/to/myapp/storage/app/public/user-avatar.png
如果上传的资源文件是存在本地的, Laravel 默认会放在 storage/app 里面,这个目录是不可见的,如果想要能公共访问就必须暴漏在根目录下的 public 中,这就是创建软连接的原因。

二、Laravel 的选择

Laravel 默认创建软连接的方式已经提过。

public/storage → storage/app/public

storage/app/public 的意思很好理解,就是存储在服务器上,但是暴漏给公共(public)使用的资源目录。那么 public/storage 呢!为什么要这样命名?下面是我的思考,假如不这样命名,我们能用什么命名方式?

2.1 第一种命名

public/public → storage/app/public

这样的好处是软连接 public 和被指向的目录名一致,方便记忆。但是访问资源的路径变成:

有一个问题是,你能说 CSS 和 JS 不是 public 的吗?所以这个 pass 掉。

2.2 第二种命名

public/uploads → storage/app/public

此时,访问资源的路径是:

这容易有误解 ——上传的文件资源都可以使用 http://my.app/uploads/ 的形式访问到。

2.3 Laravel 的选择

虽然

public/storage →  storage/app/public

的选择不如第一种命名方式方便记忆,但还是保持了某种程度上的语义,不容易被误解——

用户访问的是服务器上存储的资源文件,而且这个文件资源是可以公共访问的。

相关文章

网友评论

      本文标题:关于 `storage:link` Artisan 命令的一些思

      本文链接:https://www.haomeiwen.com/subject/iizcaftx.html