WedX - журнал о программировании и компьютерных науках

Скачать файл с сервера Laravel и reactjs

Привет всем, я новичок в Laravel и reactjs, и у меня есть вопрос, я пытаюсь загрузить файл с сервера в браузер. Мой запрос в порядке, но файл, который я хотел, не читается (если я щелкну правой кнопкой мыши в своем браузере Сеть-> Предварительный просмотр, я обнаружу, что символы и символы не читаются), также файл не загружается. Я использовал код Visual Studio для кодирования в Windows.

Контроллер загрузки:

public function download()
{
    $file = public_path()."/file.pdf";
    return response()->download($file);
}

маршруты/api.php:

Route::get('download','Api\DownloadController@download');

В файле JS:

import React, { Component } from 'react';
import axios from 'axios';

export default class download extends Component{

    constructor () {
        super();
    }

    componentDidMount() {
            axios.get(`https://127.0.0.1:8000/api/download`)
                .then((response) => {
                    console.log('hello');
                });
    }

    render() {
        return (
            <div>
                <button onClick={this.componentDidMount.bind(this)} className="btn btn-primary">Download</button>
            </div>
        );
    }
}
27.09.2019


Ответы:


1

Вы должны быть знакомы с вызовами axios для использования API, но как насчет получения файлов в ответ и отображения этих файлов пользователю для загрузки. Мы вас покрыли, приведенный ниже фрагмент кода протестирован и работает хорошо.

axios({
  url: 'https://api.dev/file-download',
  method: 'GET',
  responseType: 'blob', // important
}).then((response) => {
   const url = window.URL.createObjectURL(new Blob([response.data]));
   const link = document.createElement('a');
   link.href = url;
   link.setAttribute('download', 'file.pdf'); //or any other extension
   document.body.appendChild(link);
   link.click();
});

Спасибо этому Джавилобо за его полезное решение.

Вы можете проверить https://github.com/kennethjiang/js-file-download/blob/master/file-download.js, чтобы узнать, как обрабатывать загрузку IE.

27.09.2019

2

попробуйте установить правильные заголовки в функции загрузки laravel:

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

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

[1] https://stackoverflow.com/a/20415796/592868

27.09.2019

3

Вы можете использовать заголовок, а также преобразование перед отправкой содержимого. Эти строки заставляют браузер загружать файл XML из моей пользовательской коллекции или модели.

$response = Response::create(strval($someCollection), 200);
$response->header('Content-Type', 'text/xml');
$response->header('Cache-Control', 'public');
$response->header('Content-Description', 'File Transfer');
$response->header('Content-Disposition', 'attachment; filename=custome_filename.xml');
$response->header('Content-Transfer-Encoding', 'binary');
return $response;

Если ваш файл готов, нет необходимости читать его содержимое, поэтому вы можете использовать это:

return response()->download($pathToFile, $name, $headers);

И $headers может быть массивом из приведенного выше примера, например:

$header = ['Content-Type' => 'text/xml'];

с более индивидуальными key => value

Нет необходимости использовать Axios или... Вы можете напрямую вызывать URL-адрес своей конечной точки на стороне Laravel, как это делается в React или чистом JS.

window.location.href = window.YOUR_API_DOWNLOAD_URL;
27.09.2019
Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: wedx@cp9.ru