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

У меня большая проблема с тем, чтобы разрешить пользователям 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'));

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

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

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


person novice    schedule 21.10.2020    source источник


Ответы (2)


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

<a href="{{ storage_path('app/files/'.auth()->user()->id_message.'/file.zip') }}" title="Download" target="_blank">
    <button class="btn btn-success">Download</button>
</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($fileurl))]);

   //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">
    <button class="btn btn-success">Download</button>
</a>
person zahid hasan emon    schedule 21.10.2020

Чтобы создать ссылку для загрузки (см. документы)

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

В клинке просто вызовите URL-адрес (метод получения),

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