Как скачать файл из хранилища? - PullRequest
1 голос
/ 11 июня 2019

Я использую систему хранения файлов 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 ]

1 голос
/ 11 июня 2019

Удалите это download="{{$file->name}}" из ссылки.
Вы можете добавить download в качестве атрибута html:

<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/, используйте:

return response()->download(storage_path('/storage/app/files/'. $file));
0 голосов
/ 11 июня 2019

Я думаю, что вы передаете файловый объект вместо имени файла в маршрут загрузки. Попробуйте

 @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)}} на {{route ('download', $ file-> name)}}. Также попробуйте заменить контроллер загрузки на этот код

public function download($file){
    return response()->download(storage_path('app/files/'.$file));
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...