Прежде всего, по моему мнению, вы должны хранить файлы в системе хранения laravel, а не в базе данных.
Но если Вы хотите сделать это с базой данных. Вот пример для вывода файла, который хранится в поле BLOB-объекта базы данных (например, в поле content
таблицы files
).
Другой не очень красивый метод - преобразовать файл в base64
строку и сохранить в текстовом поле, подробнее здесь .
Схема для таблицы 'db_files'
field | type
----------|-------------
id | BIGINT
name | VARCHAR(255)
content | BLOB
mime_type | VARCHAR(255)
Маршруты
Route::get('/files/{id}', 'FileController@show')->name('file.show');
DbFile Модель
use Illuminate\Database\Eloquent\Model;
class DbFile extends Model {
// ...
}
FileController
public function show($id) {
$dbFile = DbFile::firstOrFail($id);
// the $dbFile->mime_type should be 'application/pdf' for pdf files
// the $dbFile->name should be in this schema 'document.pdf'
return response($dbFile->content)
->withHeaders([
'Content-type: ' . $dbFile->mime_type,
'Content-Disposition: attachment; filename=' . $dbFile->name
]);
}
Просмотр
<a href="{{ route('file.show', ['id' => 1]) }}" target="_blank">Show Document</a>
Я не могу сейчас проверить код. Дайте мне знать, если что-то пойдет не так.