Laravel как загрузить файл для пользователя Auth () в представлении панели мониторинга

#php #laravel #download #laravel-blade #file-storage

#php #laravel #Скачать #laravel-blade #файловое хранилище

Вопрос:

У меня большая проблема с тем, чтобы разрешить пользователям Auth загружать сохраненные файлы в хранилище laravale. Пользователи имеют в users поле таблицы id_message уникальное имя папки, в которой у пользователя есть файл для загрузки.

Что нужно сделать AuthController , dashboard.blade чтобы получить доступ к файлу загрузки пользователя? проблема в том, как добавить из табличной переменной id_message в file path

Файл сохраняется /app/files/{id_message}/*.zip

 return response()->download(store_path('app/files/'.(Auth()->user()->id_message).'/*.zip'));
  

И в конце, что будет в blade

 <td><a href="{{ }}">Download</a></td>
  

Не могу понять, почему эту проблему так сложно решить для меня.

Ответ №1:

вы можете просто использовать <a> тег с URL-адресом файла в качестве href тега.

 <a href="{{ storage_path('app/files/'.auth()->user()->id_message.'/file.zip') }}" title="Download" target="_blank">
    Download
</a>
  

или вы можете сделать это с помощью метода контроллера.

маршрут

 Route::get('download-my-file', 'MyController@downloadZipFile')->name('downloadZipFile');
  

контроллер

 public function downloadZipFile()
{
   $fileName = storage_path('app/files/'.auth()->user()->id_message.'/file.zip');
   return response()->download($fileName);
   // you can add file name as the second parameter
   return response()->download($fileName, 'MyZip.zip');
   // you can pass an array of HTTP headers as the third argument
   return response()->download($fileName, 'MyZip.zip', ['Content-Type: application/octet-stream', 'Content-Length: '. filesize($fileName))]);

   // you can check for file existence. 
   if (file_exists($fileName)) {
       return response()->download($fileName, 'MyZip.zip');
   } else {
       return 0;
   }
}
  

и в представлении

 <a href="{{ route('downloadZipFile') }}" target="_blank">
    Download
</a>
  

Комментарии:

1. Примеры «просмотра» могут быть более полезными. A button — или любой интерактивный контент — не может быть вложен в a элемент. Это недопустимый html. 4.5.1 Элемент a

Ответ №2:

Чтобы создать ссылку для скачивания, (см. Документы)

 $filepath = app_path() . '/files/' . Auth::user()->id_message . '/*.zip'
if(IlluminateSupportFacadesFile::exists($filepath)){
    return response()->download($filepath, 'your_filename', [
        'Content-Length: '. filesize($filepath)
    ]);    
}else{
    return false; //you can show error if it returns false
}

  

В блейде просто вызовите URL (метод get),

 <td><a href="{{ url('download/' . auth->user()->id_message) }}" 
 target="_blank">Download</a></td>