AngularJs загрузить csv используя на бекенде Symfony2 StreamedResponce

257
24 апреля 2018, 01:50

Я хочу загрузить CSV файл при нажатии на кнопку на странице:

<span ng-click="downloadCsv()"
          class="table-settings__control">
                    <ng-include src="'app/icons/icon.html'"
                                class="table-settings__control-icon"></ng-include>
                    {{"table.menu.export" | translate}}
                  </span>

Мой контроллер в ангуляржс: vm.downloadHref = env.api + 'page/export'; function downloadLmTreeCsv() { myService.downloadCsv(vm.downloadHref, $filter('date')(vm.startDate, 'dd-mm-yyyy H:i:s'));
} Сервис (там же):

function downloadCsv(httpPath,date) {
            var fileName = generateCsvFileName(date);
            $http.get(httpPath,{
                responseType: 'arraybuffer'
            })
                .success(function (data, status, headers) {
                    var textCsv = 'text/scv';
                    headers = headers();
                    var filename = fileName + '.' + 'csv';
                    var contentType = headers['content-type'] || textCsv;
                    try {
                        var blob = new Blob([data], {
                            type: contentType
                        });
                        if (navigator.msSaveBlob) {
                            navigator.msSaveBlob(blob, filename);
                        } else {
                            var saveBlob = navigator.webkitSaveBlob || navigator.mozSaveBlob || navigator.saveBlob;
                            if (saveBlob === undefined) {
                                throw 'Not supported';
                            }
                            saveBlob(blob, filename);
                        }
}

Суть в том, что когда я нажимаю на кнопку ничего не происходит, может я использую неправильный метод или еще что? Если я пытаюсь скачать файл через Постман, то всё нормально, но через фронт вообще ничего... В чем может быть проблема? Вот мой респонс в Симфони:

$response = new StreamedResponse();
        $response->setCallback($csv);
        $response->headers->set('Content-Type', 'text/csv');
        return $response;

Еще я пробовал использовать библиотеку FileSaver, но результат аналогичный:

function downloadCSV($http, ENV) {
        $http.get(`${ENV.api}/export`,{responseType:'arraybuffer'}).success(function(data) {
            var file = new Blob([data], { type: 'text/csv' });
            saveAss(file, 'filename.csv');
        });
  }

UPDATE Метод заработал, вот только неправильно, теперь закачка начинается когда страница загружается, а при нажатии на кнопку ничего не происходит...

READ ALSO
Ассоциативный массив fetchAll()

Ассоциативный массив fetchAll()

Имеется функция возвращающая ассоциативный массив:

205
PHP junior, что нужно знать сегодня?

PHP junior, что нужно знать сегодня?

Приветствую, я человек стремящийся устроится джуном в какую-нибудь компанию или студию, прошу совета у васДабы не углубляться во все это...

215
На чем лучше написать серверную часть

На чем лучше написать серверную часть

Я новичок самоучка в программировании, хочу создать нормальный планировщик задач, но при этом одним из главных требований является то что...

183
редактирование готового шаблона pdf PHP

редактирование готового шаблона pdf PHP

Имеется готовый шаблон PDFНужно подставлять значения в нужные места по типу ФИО, дата рождение, адрес и тд

190