Загрузка файлов, которые были сохранены с использованием фасада хранилища в laravel 5.4 - PullRequest
0 голосов
/ 08 мая 2019

Я заметил, что метод Storage::download($path) недоступен до Laravel 5.6.Я бы предпочел не создавать символические ссылки, поскольку мне кажется, что это противоречит цели использования фасада хранилища, а также может сохранить файл в папке активов (не уверен, насколько правильно я это сказал).

У меня вопрос, как я могу загрузить файл, который я сохранил, используя фасад хранилища, и не сделать файл публично видимым через ссылку URL?

1 Ответ

0 голосов
/ 08 мая 2019

Я использую это:

$path = "/path/to/file/";
$filename = "my_file.pdf"
return response(Storage::disk('local')->get($path.$filename), 200)
            ->header('Content-Type', Storage::disk('local')
                ->mimeType($path.$filename)
);

Редактировать:

Если для хранения вы используете:

$path=$request->file('file')->store('file');

, который собирается сохранить файл вstorage/app/file папка с именем, созданным laravel.Например:

storage/app/file/7K5gIZvRVWbdBedRXEyVm5X1Ubz61vJZguFmERlT.jpeg

(Убедитесь, что файл был сохранен).

И в БД вы должны сохранить (я не знаю, как вы это делаете, но это 'file 'folder и имя файла, созданного laravel):

file/7K5gIZvRVWbdBedRXEyVm5X1Ubz61vJZguFmERlT.jpeg

Итак, для загрузки вам необходимо составить маршрут:

Route::get('/download', 'DownloadController@downloadFile')->name('download-file');

и метод контроллера:

public function downloadFile()
{
     $path = // get the DB field

     return response(Storage::get($path), 200)
         ->header( 'Content-Type', Storage::mimeType($path) );
}

И вы можете добавить ссылку в виде:

<a href="{!! route('download-file') !!}" download>Download the file</a>
...