Laravel 5.4存储:下载文件。文件不存在,但显然它确实存在

时间:2017-02-08 14:52:21

标签: laravel

我一直都在这。我上传了以下内容:

public function store(Tool $tool)
{

     If(Input::hasFile('file')){
        $file = Input::file('file');
        $name = $file->getClientOriginalName();
        $path=Storage::put('public',$file);         //Storage::disk('local')->put($name,$file,'public');

        $file = new File;
        $file->tool_id = $tool->id;
        $file->file_name = $name;
        $file->path_to_file = $path;
        $file->name_on_disk = basename($path);
        $file->user_name = \Auth::user()->name;
        $file->save();

        return back();
    }

然而,当我尝试下载时:

public function show($filename)
    {   

        $url = Storage::disk('public')->url($filename);

        ///$file = Storage::disk('public')->get($filename);
        return response()->download($url);
    }

我从laravel获取了FileNotFound异常 但是,如果我改用它:

$file = Storage::disk('public')->get($filename);
return response()->download($file);

我得到了

  

File.php第37行中的FileNotFoundException:文件"使用calib;

     

插入   笔记(tool_iduser_idnotecreated_atupdated_at)   VALUES(1,1,' windows server 2008糟透了,现在(),现在());"不存在

这是文件的实际内容......

显然可以找到该文件。但为什么不下载?

3 个答案:

答案 0 :(得分:26)

试试这个:

return response()->download(storage_path("app/public/{$filename}"));

答案 1 :(得分:3)

替换:

$file = Storage::disk('public')->get($filename);
return response()->download($file);

使用:

return response()->download(storage_path('app/public/' . $filename));

response()->download()获取文件的路径,而不是文件内容。更多信息请访问:https://laravel.com/docs/5.4/responses#file-downloads

答案 2 :(得分:3)

如果任何人仍然无法找到他们的文件,即使该文件明显存在,请尝试

return response()->file(storage_path('/app/' . $filename, $headers));

可能是由于缺少目录分隔符,或者它没有存储在公共文件夹中。