无法从laravel 5.4中的存储文件夹下载文件

时间:2017-04-10 05:54:57

标签: laravel-5

我已将文件存储在$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文件夹下载文件?

4 个答案:

答案 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);
}