Как создать ссылку для скачивания в Laravel

У меня возникла проблема с созданием ссылки для загрузки файлов с помощью мобильного приложения из папки Laravel Storage.

Я сделал что-то вроде $link = Response::Download(storage_path()./file/example.png), но безрезультатно.

Я переместил файл в общую папку и использовал http://domain.com/file/example.png и asset('file/example.png'), но безрезультатно.

Я получаю 404 NOT FOUND ERROR

Как это решить?

Ответ 1

Взгляните на документацию помощников Laravel: http://laravel.com/docs/4.2/helpers

Если вам нужна ссылка на ваш актив, вы можете сделать это следующим образом:

$download_link = link_to_asset('file/example.png');

Edit

Если вышеуказанный метод не работает для вас, вы можете реализовать довольно простой маршрут загрузки в app/routes.php, который выглядит следующим образом:

Примечание. В этом примере предполагается, что ваши файлы расположены в приложении/хранилище/файле/.

// Download Route
Route::get('download/{filename}', function($filename)
{
    // Check if file exists in app/storage/file folder
    $file_path = storage_path() .'/file/'. $filename;
    if (file_exists($file_path))
    {
        // Send Download
        return Response::download($file_path, $filename, [
            'Content-Length: '. filesize($file_path)
        ]);
    }
    else
    {
        // Error
        exit('Requested file does not exist on our server!');
    }
})
->where('filename', '[A-Za-z0-9\-\_\.]+');

Использование: http://your-domain.com/download/example.png

Это будет искать файл в: app/storage/file/example.png(если он существует, отправьте файл в браузер/клиент, иначе он отобразит сообщение об ошибке).

P.S. '[A-Za-z0-9\-\_\.]+ это регулярное выражение гарантирует, что пользователь может запрашивать файлы с именем, содержащим A-Z или A-Z (буквы), 0-9 (числа), - или _ или . (символы). Все остальное отбрасывается/игнорируется. Это мера безопасности/безопасности.

Ответ 2

Обновление ответа для Laravel 5.0 и выше:

<a href={{ asset('file/thing.png') }}>Thing</a>

Ответ 3

Вам не нужен какой-либо маршрут или контроллер. Просто дайте это привязать тег.

 <a href="{{URL::to('/')}}/file/example.png" target="_blank">
     <button class="btn"><i class="fa fa-download"></i> Download</button>
 </a>

Ответ 4

Вам не нужен какой-либо маршрут или контроллер. Просто дайте его тегу anchor.

 <a href="{{URL::to('/')}}/file/example.png" target="_blank">
     <button class="btn"><i class="fa fa-download"></i> Download File</button>
 </a>