![](/img/trans.png)
[英]How to download excel file in JS from Java ByteArrayResource
[英]Receiving ByteArrayResource( from java) into Blob (into javascript)
對我的問題有任何幫助將不勝感激。 這是上下文:
我目前正在從 java RestControler 發送一個 zip 文件:
public ResponseEntity<Resource> download(@RequestBody ProjectDTO projectDTO) {
Project project = ProjectDTO.toProject(projectDTO);
byte[] out = initApplicationService.download(project);
ByteArrayResource resource = new ByteArrayResource(out);
return ResponseEntity
.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + getZipFilename(project))
.contentType(MediaType.parseMediaType("application/octet-stream"))
.contentLength(out.length)
.header("X-Suggested-Filename", getZipFilename(project))
.body(resource);
}
這非常有效,因為我可以通過 swagger 下載它。
但是在普通的 javascript 前面,我不知道我錯過了什么:主要的:
const download = async (): Promise<void> => {
if (project.value.folder !== '') {
await projectService
.download(toProject(project.value))
.then(response => {
const url = window.URL.createObjectURL(new Blob([response],{type:'application/octet-stream'}));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', project.value.baseName + '.zip');
document.body.appendChild(link);
link.click();
})
.catch(error => logger.error('Downloading project failed', error));
}
};
二次調用:
async download(project: Project): Promise<ArrayBuffer> {
const restProject: RestProject = toRestProject(project);
return this.axiosHttp
.post<ArrayBuffer, RestProject>('api/projects/download', restProject)
.then(response => new Uint8Array(response.data));
}
它很好地下載了 zip 但很好地打開它我收到以下錯誤:“存檔加載期間發生錯誤”感謝任何幫助:)
我在 post 請求中添加了 responseType,我還刪除了 Uint8Array 轉換,它工作正常。
return this.axiosHttp
.post<ArrayBuffer,RestProject>('api/projects/download', restProject,{ responseType: 'blob' })
.then(response => response.data);
我想當接收數據時,axios 需要知道將要以正確格式正確轉換的內容。 在飛行中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.