В какой-то момент в моем ember.js
веб-приложении пользователю предоставляется возможность загрузить zip-файл.При нажатии на кнопку запускается действие, которое отправляет запрос на внутренний сервер, который генерирует zip и возвращает его.В идеале zip должен быть загружен автоматически.
В моей конечной точке бэкэнда я возвращаюсь с
return Response
.ok(FileUtils.readFileToByteArray(new File(tmpZipFilename))) // tmpZipFilename is a String
.type("application/zip")
.header("Content-Disposition", "attachment; filename=\"" + finalZipFilename + "\"")
.build();
В моем внешнем интерфейсе (адаптировано с здесь )
submit() {
var formData = new FormData(this);
let token = this.get('session.data.authenticated.token');
jquery.ajax({
url: `myUrl`,
data: formData,
processData: false,
contentType: false,
beforeSend: function(xhr) {xhr.setRequestHeader('Authorization', `Bearer ${token}`)},
type: 'POST',
success: function(data) {
var blob = new Blob([data], {type: 'application/zip'});
let a = document.createElement("a");
a.style = "display: none";
document.body.appendChild(a);
let url = window.URL.createObjectURL(blob);
a.href = url;
a.download = 'myFile.zip';
a.click();
window.URL.revokeObjectURL(url);
},
failure: function() {
// other stuff
}
})
}
Заголовки ответа следующие:
HTTP/1.1 200 OK
X-Powered-By: Undertow/1
Cache-Control: no-store
Date: Tue, 19 Feb 2019 16:34:35 GMT
Server: WildFly/10
Content-Type: application/zip
Content-Disposition: attachment; filename="filename.zip"
Connection: close
Transfer-Encoding: chunked
Я подтвердил, что tmpZipFilename
в разделе бэкэнда правильно указывает на правильный zip-файл.И когда пользователь нажимает кнопку загрузки, файл с именем myFile.zip
действительно загружается.Однако загружаемый файл не может быть распакован и имеет размер, отличный от правильного файла, на который указывает tmpZipFilename
.Что я делаю не так?