【问题标题】:How to get avatar url which are stored at storage directory using laravel 5.4?如何使用 laravel 5.4 获取存储在存储目录中的头像 url?
【发布时间】:2017-09-16 19:10:11
【问题描述】:

我想获取存储目录中存储头像的 url,我使用的是 laravel 5.4。

其实我是用下面的方法上传图片并获取url。

上传图片:

<input type="file" class="form-control" value="{{ old('u_avatar') }}" name="u_avatar" />

在控制器中

$UserModel->u_avatar = $request->file('u_avatar')->store('avatars'); // Uploading Files properly in the storage/app/avatars

获取图片

我尝试了以下两种获取图像的方法,但都不起作用

第一种方法

在视图文件中

&lt;img src="{{ asset('storage/app') }}/{{ $User-&gt;u_avatar }}" class="img-responsive" /&gt; // Not Working

第二种方法 在控制器中

$User = UserModel::find($id);
//For Image
$path =  asset('storage/app/'.$User->u_avatar);// Not working 

我想请求您指导我是否以正确的方式做事?在这个reference 中,这个人在说

存储不公开。您不能在那里保存文件,然后创建指向它们的 Web 链接。这个线程是关于能够使用 laravel 来拦截对图像的调用,从私有存储中获取它并将文件流式传输到客户端。

那么有人可以在 laravel5.4 中存储文件的最佳方式是什么,以及如何以正确的方式获得。我很感激。谢谢。

【问题讨论】:

    标签: laravel laravel-5 laravel-5.4


    【解决方案1】:

    storage 目录无法通过网络访问,因此您需要创建符号链接。

    公共磁盘用于存放可公开访问的文件。默认情况下,公共磁盘使用本地驱动程序并将这些文件存储在storage/app/public中。要使它们可以从 Web 访问,您应该创建一个从 public/storagestorage/app/public 的符号链接。此约定会将您可公开访问的文件保存在一个目录中,当使用 Envoyer 等零停机时间部署系统时,该目录可以轻松跨部署共享。

    要创建符号链接,您可以使用storage:link Artisan 命令:

    php artisan storage:link

    当然,一旦存储了文件并创建了符号链接,您就可以使用资产助手创建文件的 URL:

    echo asset('storage/file.txt');

    https://laravel.com/docs/5.4/filesystem#the-public-disk

    【讨论】:

    • 非常感谢您的回答。我已按照步骤操作,但仍然提供的 url 不起作用OUTPUT == http://localhost/lara4/april/public/storage/avatars/20kIkDn1TNuUPWHaQiR1hsceaqpXxKC398v8ChyN.jpeg
    • @Mr.Developer 如果网络服务器工作正常,你应该得到这样的 URL http://localhost/storage/avatars/20kIkDn1‌​TNuUPWHaQiR1hsceaqpX‌​xKC398v8ChyN.jpeg。您应该point web server to the public directory 并重新启动它。
    • 我运行命令php artisan serve 然后同样的脚本返回http://127.0.0.1:8000/storage/avatars/20kIkDn1TNuUPWHaQiR1hsceaqpXxKC398v8ChyN.jpeg 但它也不起作用,所以我还需要将网络服务器指向公共目录吗?谢谢
    • 符号链接创建了一个指向 /storage/app/public/ 而不是 /storage/avatars 的链接。将您的文件保存在 /storage/app/public/avatars 中,它应该可以正常工作。
    • @DimitriMostrey Great Point.. 现在它工作正常.. 也感谢 Alexey
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    相关资源
    最近更新 更多