Я создаю веб-приложение, используя Spark Java framework. Интерфейс разработан с использованием AngularJS.Отправка файлов с расширением .docx с сервера на клиент с помощью Spark
Я хочу сгенерировать файл .docx на сервере (в памяти) и отправить его клиенту для загрузки.
Для достижения этой цели я создал угловое обслуживание с помощью следующей функции вызывается после того, как пользователь нажимает на кнопке загрузки:
functions.generateWord = function() {
$http.post('/api/v1/surveys/genword', data.currentSurvey).success(function (response) {
var element = angular.element('<a/>');
element.attr({
href: 'data:attachment;charset=utf-8;application/vnd.openxmlformats-officedocument.wordprocessingml.document' + response,
target: '_blank',
download: 'test.docx'
})[0].click();
});
};
На сервере, этот апи вызов получает пересылаемую следующий метод:
public Response exportToWord(Response response) {
try {
File file = new File("src/main/resources/template.docx");
FileInputStream inputStream = new FileInputStream(file);
byte byteStream[] = new byte[(int)file.length()];
inputStream.read(byteStream);
response.raw().setContentType("data:attachment;chatset=utf-8;application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.raw().setContentLength((int) file.length());
response.raw().getOutputStream().write(byteStream);
response.raw().getOutputStream().flush();
response.raw().getOutputStream().close();
return response;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Я попытался решить эту проблему по-разному, и я всегда в конечном итоге с поврежденным «test.docx», который выглядит следующим образом: