如何从存储下载文件?

时间:2019-06-10 22:15:08

标签: php laravel storage

我正在使用Laravel的文件存储系统,并且试图触发下载响应以通过浏览器下载我的文件,但是它找不到正确的文件,而是下载了我的文件页面查看脚本。我也设置了一个存储链接。

任何建议将不胜感激。

File.blade.php

 @extends('layouts.app')

 @section('content')


 <div class="container">
  <form action="{{route('upload')}}" method="POST" 
  enctype="multipart/form-data" name="formName"> 
{{csrf_field() }}
     <input type="file" name="file">
     <input type="submit" class="btn" name="submit">
</form>
<div class="row">
@foreach($files as $file)
   <a href="{{route('download',$file)}}" download="{{$file->name}}"> 
   {{$file->name}}</a>

 </div>
 </div>

 @endsection

下载功能

public function download($file){


    return response()->download(storage_path('/storage/app/files/'.$file));
 }

文件路由

  Route::get('files', 'FileController@index')->name('upload');
  Route::post('files', 'FileController@store');
  Route::get('files/{file}', 'FileController@download')->name('download');

2 个答案:

答案 0 :(得分:1)

从链接中删除此expandAnim.fromValue = max(expandScale,26.0) expandAnim.toValue = 1.0
您可以将download="{{$file->name}}"添加为html属性:

download

但是在这种情况下您不需要它,只需使用:

<a href="{!! route('download', $file->name) !!}" download>{{ $file->name }}</a>

控制器中的<a href="{!! route('download', $file->name) !!}">{{$file->name}}</a> 方法将生成一个响应,该响应迫使浏览器在给定路径下下载文件。因此,请确保您的路径正确无误。
如果文件位于response()->download()中,则可以使用:

your-project-root-path/storage/app/files/

如果文件位于return response()->download(storage_path('/app/files/'. $file)); 中,请使用:

your-project-root-path/storage/storage/app/files/

答案 1 :(得分:0)

我认为您正在将文件对象而不是文件名传递给下载路径。 试试

 @extends('layouts.app')

 @section('content')


 <div class="container">
  <form action="{{route('upload')}}" method="POST" 
  enctype="multipart/form-data" name="formName"> 
{{csrf_field() }}
     <input type="file" name="file">
     <input type="submit" class="btn" name="submit">
</form>
<div class="row">
@foreach($files as $file)
   <a href="{{route('download',$file->name)}}" download> 
   {{$file->name}}</a>

 </div>
 </div>

 @endsection

尝试将{{route('download',$ file-> name)}}替换为{{route('download',$ file-> name)}}。 另外,尝试用此代码替换下载控制器

public function download($file){
    return response()->download(storage_path('app/files/'.$file));
 }