我已将文件存储在$path=$request->file->store('files')
的storage / app / files文件夹中,并将路径“files / LKaOlKhE5uITzAbRj5PkkNunWldmUTm3tOWPfLxO.doc”保存在表的列名file
中。
我还通过php artisan storage:link
将存储文件夹链接到公开。
在我查看的刀片文件中,我把这个
<a href="@if(count($personal_information)) {{asset('storage/'.$personal_information->file)}} @endif" download>Download File</a>
,下载文件的链接为http://localhost:8000/storage/files/LKaOlKhE5uITzAbRj5PkkNunWldmUTm3tOWPfLxO.doc
但是我收到了错误
RouteCollection.php第161行中的NotFoundHttpException
如果我在/app
之后添加/storage
,则会出现同样的错误。如何从storage/app/files
文件夹下载文件?
答案 0 :(得分:4)
问题是存储文件夹默认情况下无法公开访问。存储文件夹很可能会丢弃一些私有文件,例如用户图片,而其他用户无法访问这些文件。如果将它们移动到公用文件夹,则每个人都可以访问文件。我和Laravel 5.4有类似的问题,我通过编写下载文件的路径做了一些小事。
Route::get('files/{file_name}', function($file_name = null)
{
$path = storage_path().'/'.'app'.'/files/'.$file_name;
if (file_exists($path)) {
return Response::download($path);
}
});
或者您可以将文件保存到公开文件夹中。
答案 1 :(得分:0)
我正在使用Laravel 6.X,并且遇到类似的问题。根据您的问题的解决方法如下: 1)在您的 routes / web.php 中做类似的事情
/**sample route**/
Route::get('/download/{path}/', 'MyController@get_file');
2)然后,在您的控制器( MyController.php )中,对于我们的情况,它应如下所示:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MyController extends Controller
{
public function get_file($path)
{
/**this will force download your file**/
return response()->download($path);
}
}
答案 2 :(得分:0)
如果您的文件存储在公共目录中,请使用:public_path()。但如果您的文件存储在存储目录中,则使用:storage_path()
注意:如果您的存储文件夹仅包含附件文件夹,请考虑采用这种方式:storage_path('photos/');
$destination = storage_path('storage/photos/');
or
$destination = public_path('storage/photos/');
$filename = "user_3423423465.png";
$pathToFile = $destination.$filename;
return response()->download($pathToFile,'user_profile_photo.png');
答案 3 :(得分:0)
Laravel8
创建链接
<a href="{{ url('download?path='. $user->avatar) }}">
Download
</a>
定义路由
Route::get('download', [DownloadController::class,'download']);
处理
public function download(Request $request){
return Storage::download($request->filePath);
}