2015-03-16 3 views
-1

у меня есть проблема, когда я хочу, чтобы загрузить файл почтового индекса из апи Rest,Получить почтовый файл, angularJs

Когда почтовый файл будет tranfered с моего сервера (с футболкой), я получаю его повреждения, ...

Я уже пытался поставить responseType: 'arraybuffer' на мой запрос $ http, но это ничего не исправляет ... вот мой код.

$http.get(uploadUrl, { 
      cache: false, 
      responseType: 'arraybuffer' 
     }) 
    .success(function (data, $scope) { 
     var element = angular.element('<a/>'); 
     console.debug("data : " + data); 
     element.attr({ 
      href: 'data:application/octet-stream;charset=utf-8,' + encodeURI(data), 
      target: '_blank', 
      download: fileName 
     })[0].click(); 
     }) 
    .error(function() { 
     console.info("fail on download"); 
     }); 
}; 

ответ

1

Я столкнулся с этой проблемой в прошлом , Вы должны использовать Buffer, а также и вызвать открытие «Сохранить как» диалог, как описано ниже:

var url = (...) 
var expectedMediaType = (...) 

var requestData = (...) 
$http.post(url, requestData, { 
    params: { 
    queryParam: 'queryParamValue' 
    }, 
    headers: { 
    'Content-Type': 'application/json', 
    'Accept': expectedMediaType 
    } 
}).then(function (response) { 
    var filename = (...) 
    openSaveAsDialog(filename, response.data, expectedMediaType); 
}); 

Вот содержание функции openSaveAsDialog:

function openSaveAsDialog(filename, content, mediaType) { 
    var blob = new Blob([content], {type: mediaType}); 
    saveAs(blob, filename); 
} 

Чтобы использовать saveAs, вам необходимо включить библиотеку https://github.com/eligrey/FileSaver.js. Чтобы установить его, просто укажите его файл js, используя скрипт тега на вашей странице HTML.

<script src="js/FileSaver.js"></script> 

Я написал сообщение в блоге, описывающее, как это исправить: https://templth.wordpress.com/2014/11/21/handle-downloads-with-angular/.

Надеется, что это поможет, Тьерри

+0

редактировал свой ответ с более Детали –

0

Я загружаю zip так же ($ http/arrayBuffer), и он работает.

Я бы предположил, что проблема исходить от:

encodeURI(data) 

Я думаю, вы должны кодировать его в base64 (есть тонны exemples там как https://github.com/niklasvh/base64-arraybuffer/blob/master/lib/base64-arraybuffer.js)

+0

да на самом деле это была проблема кодирования, я решил ее стирают данные:/и с помощью непосредственно URL для HREF :) –

Смежные вопросы