Ниже подробно описывается служба отдыха JAVA, которая загружает файл с сервера: Прототип метода:
@POST
@Path("/prop/export")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Consumes(MediaType.APPLICATION_JSON)
public Response exportItemsToFile(Map<String, String> params);
Ответ построен из байтового массива в своей реализации:
Response.ok(someByteArray)
Я использую FileSaver.saveAs
, чтобы загрузить ответ в файле xls, используя приведенный ниже код
var requestUri = '/wtk/rc/v1/pfm/prop/export';
var payload={"context":addCtx,"language":addLang,"country":addCountry,"swimlane":addSL};
$http.post(requestUri, payload, {
headers: {
'Content-Type': 'application/json'
},
responseType: 'arraybuffer',
}).success(function (data) {
var blob = new Blob([data],{type : 'application/vnd.ms-excel'});
var fileName = addLang+"_"+addCountry+".xls";
filesaver.saveAs(blob,fileName);
}).error(function () {
//download failed
});
Ответ, который является файлом xls, поврежден с использованием вышеуказанного кода.**
Это потому, что обещание, возвращаемое $ http.post, имеет пустой ответ в случае, если клиент rest создает поток октетов
**
Но если я использую какой-нибудь остальной клиент, такой как Почтальон, выберу опцию «Отправить и скачать» и сохраню ответ как xls.Все идет хорошо.
Любая помощь в этом будет оценена.