Angularjs: вызов REST API для получения документа docx с сервера

Я пытаюсь вызвать службу из 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();
})

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

Jignesh M. Khatri 29.10.2018 10:30

какая-то ошибка в моем коде, у меня новый Blob ([result.body], {type: 'application / docx'}); что дает мне неопределенность. Если я это сделаю: новый Blob ([result.body], {type: 'application / docx'});, я получаю [объект объекта] в документе docx.

thomas 29.10.2018 10:37

такая же проблема с APPLICATION_OCTET_STREAM_VALUE

thomas 29.10.2018 10:48
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
0
3
114
0

Другие вопросы по теме