Laravel 从存储中检索图像以查看

Ala*_*ene 10 laravel

我使用下面的代码来存储上传的文件

 $file = $request->file($file_attachment);
        $rules = [];
        $rules[$file_attachment] = 'required|mimes:jpeg|max:500';
        $validator = Validator::make($request->all(), $rules);
        if ($validator->fails()) {
            return redirect()->back()
                ->with('uploadErrors', $validator->errors());
        }

        $userid = session()->get('user')->id;
        $destinationPath = config('app.filesDestinationPath') . '/' . $userid . '/';
        $uploaded = Storage::put($destinationPath . $file_attachment . '.' . $file->getClientOriginalExtension(), file_get_contents($file->getRealPath()));
Run Code Online (Sandbox Code Playgroud)

上传的文件存放在storage/app/2/filename.jpg

我想向用户展示他上传的文件。我怎样才能做到这一点?

$storage = Storage::get('/2/filename.jpg');

我收到无法阅读的文本。我可以确认文件已被读取。但是如何将其作为图像显示给用户。

希望我说清楚了。

工作解决方案

display.blade.php

<img src="{{ URL::asset('storage/photo.jpg') }}" />
Run Code Online (Sandbox Code Playgroud)

网页.php

Route::group(['middleware' => ['web']], function () {
    Route::get('storage/{filename}', function ($filename) {
        $userid = session()->get('user')->id;
        return Storage::get($userid . '/' . $filename);
    });
});
Run Code Online (Sandbox Code Playgroud)

感谢:@Boghani Chirag 和 @rkj

rkj*_*rkj 14

文件不能像您说的那样公开访问,然后像这样读取文件

$userid = session()->get('user')->id;
$contents = Storage::get($userid.'/file.jpg'); 
Run Code Online (Sandbox Code Playgroud)

假设您的文件在路径中storage/app/{$userid}/file.jpg 并且默认磁盘是local检查config/filesystems.php

文件可公开访问

如果您想让您的文件可公开访问,请将文件存储在此storage/app/public文件夹中。您可以在其中创建子文件夹并在那里上传。将文件存储在其中 storage/app/public后,您只需创建一个符号链接,laravel 就会为其提供 artisan 命令。

php artisan storage:link
Run Code Online (Sandbox Code Playgroud)

这将创建一个符号链接storage/app/publicto public/storage。意味着现在您可以像这样访问您的文件

$contents = Storage::disk('public')->get('file.jpg'); 
Run Code Online (Sandbox Code Playgroud)

这里是文件物理路径storage/app/public/file.jpg,它通过符号链接路径访问public/storage/file.jpg

假设您有 storage/app/public/uploads存储上传文件的子文件夹,那么您可以像这样访问它

$contents = Storage::disk('public')->get('uploads/file.jpg');
Run Code Online (Sandbox Code Playgroud)

当您在公共文件夹中上传时,您可以在视图中访问它

echo asset('storage/file.jpg'); //without subfolder uploads

echo asset('storage/uploads/file.jpg');
Run Code Online (Sandbox Code Playgroud)

检查详细信息https://laravel.com/docs/5.6/filesystem#configuration


Ter*_*nal 7

在此输入图像描述

请记住将您的文件夹放在 storage/app/public/ 中

创建符号链接符号链接来访问此文件夹

php artisan storage:link
Run Code Online (Sandbox Code Playgroud)

如果您想访问 2 个文件夹的个人资料图像,请在您的 Blade 文件中执行以下操作

<img src="{{ asset('storage/2/images/'.$user->profile_image) }}" />
Run Code Online (Sandbox Code Playgroud)