#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>