Подтвердить что ты не робот

Скачивание файлов в laravel с помощью Response:: скачать

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

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

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

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

Кнопка

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

Маршрут:

Route::get('/download', '[email protected]');

Контроллер:

public function getDownload(){
        //PDF file is stored under project/public/download/info.pdf
        $file="./download/info.pdf";
        return Response::download($file);
}
4b9b3361

Ответ 1

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

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 в ассоциативный массив => - двоеточие после "Content-Type" было удалено - если мы не сделаем эти изменения, тогда заголовки будет добавлено неверно: имя заголовка wil будет начинаться с цифры 0,1,...)

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

return response()->download($file, 'filename.pdf', $headers);

Ответ 2

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

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

Ответ 3

Загрузка файлов супер проста в 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}', '[email protected]');

Сделайте способ загрузки в 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"

Если вы втянули пакет Laravel Collective Html, вы можете использовать фасад Html:

{!! Html::link('download/filename.ext', 'File Name') !!}

Ответ 4

При использовании 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);           
}

Ответ 5

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

//вам нужно использовать фасад "Use Illuminate\Http\Response;"

public function getDownload()
{

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

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

    return response()->download($file);
}

Ответ 6

Довольно многие из этих решений предлагают ссылку на 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

Ответ 7

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

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

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

С этим вы уверены, что это pdf.