在我的Laravel 6应用程序中,文件存储在storage/uploads
文件夹中,因此您无法创建指向它们的直接链接。要访问文件,有一种方法可以从控制器调用该方法。
Route::middleware(['auth'])->group(function () {
Route::get('uploads/{filename}', 'UploadController@getFile')->name('uploads.get');
}
UploadController@getFile
方法访问storage/uploads
并下载文件。
public function getFile(string $filename)
{
return response()->download(storage_path('uploads/' . $filename));
}
如果使用中间件auth
,则只会下载一个代码为200的文件,而返回其他文件的代码为302
view.blade.php
...
@foreach($user->files as $file)
<img src="{{ route('uploads.get', $file) }}" class="img-thumbnail">
@endforeach
...
刷新页面时,将再加载一个文件。将它们存储在缓存中之后,所有文件都将成功下载,代码为200。
如果您删除中间件auth
,则可以解决此问题。
Route::get('uploads/{filename}', 'UploadController@getFile')->name('uploads.get');
我在做什么错了?
更新
如果我使用函数response()->file()
而不是response()->download()
,则结果相同。
有趣的是,所有带有代码302的响应都将发起对/login
的请求。这些请求中的一些以代码200返回,其他请求也以代码302返回。该应用程序使用标准的Laravel身份验证系统。