【发布时间】:2021-03-30 00:14:08
【问题描述】:
我正在使用下面的代码来存储上传的文件
$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()));
上传的文件存储在storage/app/2/filename.jpg
我想向用户展示他上传的文件。我该怎么做?
$storage = Storage::get('/2/filename.jpg');
我收到不可读的文本。我可以确认文件已被读取。但是如何将其作为图像显示给用户。
希望我能说清楚。
工作解决方案
display.blade.php
<img src="{{ URL::asset('storage/photo.jpg') }}" />
web.php
Route::group(['middleware' => ['web']], function () {
Route::get('storage/{filename}', function ($filename) {
$userid = session()->get('user')->id;
return Storage::get($userid . '/' . $filename);
});
});
感谢:@Boghani Chirag 和 @rkj
【问题讨论】:
-
您是否尝试过从公共文件夹创建指向您的图像存储文件夹的符号链接?然后从那里访问网址? (一些 nginx/apache 配置可能需要允许符号链接目录)虽然我不推荐这样做,但尝试将其保存在公用文件夹中。就个人而言,我更喜欢在处理后将图像上传到某些 cdn 或图像提供商(如 cloudinary)并从他们那里提供 url。
-
没有。我不能那样做。用户信息比较敏感,我不能把它放在公共文件夹或云端...
-
我明白了,将其用作数据uris 怎么样?使用 img 标签为用户提供服务:css-tricks.com/data-uris
-
您可以将文件名存储在db中,然后您可以轻松找到在刀片文件中显示的路径
标签: laravel