Я пытаюсь вызвать службу из angularjs, которая создает документ docx.
Предполагается, что Angularjs отобразит запрос на сохранение в веб-браузере, а затем сохранит документ.
Когда я открываю сохраненный документ, в файле docx я получаю:
Undefined
Остальное api:
@RequestMapping(value = "/create-avenant",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public void getAvenant(@RequestBody AvenantDTO avenant, HttpServletResponse response) {
contratService.createAvenant(response, avenant);
}
сервис создает XWPFDocument и отправляет в браузер:
private void sendDocToBrowser(HttpServletResponse response, XWPFDocument doc) throws IOException {
try
{
byte[] buffer = new byte[8192];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
doc.write(baos);
response.setHeader("Content-Disposition", "attachment;filename=myDoc.docx");
response.setContentType("application/docx");
ServletOutputStream outputStream = response.getOutputStream();
baos.writeTo(outputStream);
outputStream.flush();
}
finally
{
outputStream.close();
}
}
Angularjs:
Avenant.create(avenant,function(result){
var blob = new Blob([result.body], { type: 'application/docx' });
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = 'file.docx';
link.click();
})
какая-то ошибка в моем коде, у меня новый Blob ([result.body], {type: 'application / docx'}); что дает мне неопределенность. Если я это сделаю: новый Blob ([result.body], {type: 'application / docx'});, я получаю [объект объекта] в документе docx.
такая же проблема с APPLICATION_OCTET_STREAM_VALUE


Не могли бы вы попробовать заменить
producesнаproduces = MediaType.APPLICATION_OCTET_STREAM_VALUEв контроллере?