Загрузка файлов в laravel с помощью ответа::скачать


В приложении Laravel я пытаюсь создать вид кнопки внутри, который позволит пользователю загружать файл без перехода к какому-либо другому виду или маршруту Теперь у меня есть две проблемы: (1) ниже функция метания

The file "/public/download/info.pdf" does not exist

(2) Кнопка загрузки не должна перемещать пользователя куда угодно, а просто загружать файлы в том же представлении, Мои текущие настройки, перенаправляя представление в "/загрузить"

Вот как я пытаюсь достичь:

Кнопка:

  <a href="/download" class="btn btn-large pull-right"><i class="icon-download-alt"> </i> Download Brochure </a>

Маршрут :

Route::get('/download', 'HomeController@getDownload');

Контроллер:

public function getDownload(){
        //PDF file is stored under project/public/download/info.pdf
        $file="./download/info.pdf";
        return Response::download($file);
}
Author: star18bit, 2013-12-06

7 answers

Попробуйте это.

public function getDownload()
{
    //PDF file is stored under project/public/download/info.pdf
    $file= public_path(). "/download/info.pdf";

    $headers = array(
              'Content-Type: application/pdf',
            );

    return Response::download($file, 'filename.pdf', $headers);
}

"./download/info.pdf" не будет работать, так как вы должны дать полный физический путь.

Обновление 20/05/2016

Laravel 5, 5.1, 5.2 или 5.* Пользователи могут использовать следующий метод вместо Response фасада. Однако мой предыдущий ответ будет работать как для Laravel 4, так и для 5. (изменение структуры массива $header на ассоциативный массив => - двоеточие после удаления "Типа содержимого" - если мы не сделаем эти изменения, то заголовки будут добавлены неправильно: имя заголовка будет ли число начинаться с 0,1,...)

$headers = [
              'Content-Type' => 'application/pdf',
           ];

return response()->download($file, 'filename.pdf', $headers);
 110
Author: Anam, 2017-06-18 10:40:46

В принятом ответе для Laravel 4 массив заголовков построен неправильно. Использование:

$headers = array(
  'Content-Type' => 'application/pdf',
);
 26
Author: sebt, 2014-02-19 17:44:07

Загрузка файлов очень проста в Laravel 5.

Как упоминал @Ashwani, Laravel 5 позволяет загружать файлы с помощью response()->download() возвращать файл для загрузки. Нам больше не нужно возиться с какими-либо заголовками. Чтобы вернуть файл, мы просто:

return response()->download(public_path('file_path/from_public_dir.pdf'));

Изнутри контроллера.


Повторно Используемый Маршрут Загрузки/Контроллер

Теперь давайте создадим многоразовый маршрут загрузки файлов и контроллер, чтобы мы могли использовать любой файл в нашем public/files каталог.

Создайте контроллер:

php artisan make:controller --plain DownloadsController

Создайте маршрут в app/Http/routes.php:

Route::get('/download/{file}', 'DownloadsController@download');

Сделать метод загрузки в app/Http/Controllers/DownloadsController:

class DownloadsController extends Controller
{
  public function download($file_name) {
    $file_path = public_path('files/'.$file_name);
    return response()->download($file_path);
  }
}

Теперь просто поместите некоторые файлы в каталог public/files, и вы можете разместить их на сервере, связавшись с /download/filename.ext:

<a href="/download/filename.ext">File Name</a> // update to your own "filename.ext"

Если вы подключили Html-пакет Laravel Collective, вы можете использовать Html-фасад:

{!! Html::link('download/filename.ext', 'File Name') !!}
 22
Author: DutGRIFF, 2016-01-26 16:28:17

При использовании laravel 5 используйте этот код, так как вам не нужны заголовки.

return response()->download($pathToFile); .

Если вы используете Fileentry, вы можете использовать нижеприведенную функцию для загрузки.

// download file
public function download($fileId){  
    $entry = Fileentry::where('file_id', '=', $fileId)->firstOrFail();
    $pathToFile=storage_path()."/app/".$entry->filename;
    return response()->download($pathToFile);           
}
 3
Author: Ashwani Panwar, 2016-01-27 09:58:44

Довольно многие из этих решений предлагают ссылаться на public_path() приложения Laravel, чтобы найти файл. Иногда вам захочется контролировать доступ к файлу или предлагать мониторинг файла в режиме реального времени. В этом случае вы захотите сохранить каталог закрытым и ограничить доступ методом в классе контроллера. В этом должен помочь следующий метод:

public function show(Request $request, File $file) {

    // Perform validation/authentication/auditing logic on the request

    // Fire off any events or notifiations (if applicable)

    return response()->download(storage_path('app/' . $file->location));
}

Есть и другие пути, которые вы также могли бы использовать, описанные на Вспомогательные функции Laravel документация

 3
Author: Kirkland, 2017-03-13 14:54:12

//Попробуйте загрузить любой файл. ларавель 5.*

//вам нужно использовать фасад "использовать подсветку\Http\Ответ";

public function getDownload()
{

//PDF file is stored under project/public/download/info.pdf

    $file= public_path(). "/download/info.pdf";   

    return response()->download($file);
}
 2
Author: rohit ramani, 2016-08-08 03:45:55

Я думаю, что вы можете использовать

$file= public_path(). "/download/info.pdf";

$headers = array(
        'Content-Type: ' . mime_content_type( $file ),
    );

С этим вы убедитесь, что это pdf.

 2
Author: Ariel Ruiz, 2017-05-02 18:33:15