文件下载错误(服务 angular spring 启动)
File Download Error(service angular spring boot)
正在使用 angular8 和 spring 引导下载文件。 Spring 引导服务部分与 Postman 一起工作。但是当我用angular下载时,我得到一个错误。error
它没有出现在 console.log(“文件响应:”,响应)部分。
downloadFile(event) {
this.additionalDocumentService.getFileDownload(event.fileId).subscribe(response => {
console.log("File response:",response)
this.downloadFile = response;
});
}
getFileDownload(fileId: number): Observable<any> {
return this.http.get(apiHost + '/downloadFile/' + fileId);
}
@RequestMapping("/downloadFile/{dosyaId}")
public ResponseEntity<HttpStatus> handleFileDownloadPage(HttpServletRequest request, HttpServletResponse response, @PathVariable(value = "fileId") Integer fileId) throws IOException, Exception {
File file = fileService.getFileId(fileId);
if (StringUtils.hasText(dosya.getFilePath())) {
ServletOutputStream out = response.getOutputStream();
InputStream stream = null;
try {
-
stream = new FileInputStream(file.getFilePath());
int bytesRead = 0;
byte[] buffer = new byte[8192];
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", String.format(" attachment; filename=\"%s\"", file.getFileName()));
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.flush();
} catch (Exception e) {
System.err.println(e.toString());
} finally {
out.close();
if (stream != null) {
stream.close();
}
}
return null;
}
return ResponseEntity.ok(HttpStatus.OK);
}
以下函数将接受任何文件类型和弹出式下载window:
downloadFile(route: string, filename: string = null): void{
const baseUrl = 'http://myserver/index.php/api';
const token = 'my JWT';
const headers = new HttpHeaders().set('authorization','Bearer '+token);
this.http.get(baseUrl + route,{headers, responseType: 'blob' as 'json'}).subscribe(
(response: any) =>{
let dataType = response.type;
let binaryData = [];
binaryData.push(response);
let downloadLink = document.createElement('a');
downloadLink.href = window.URL.createObjectURL(new Blob(binaryData, {type: dataType}));
if (filename)
downloadLink.setAttribute('download', filename);
document.body.appendChild(downloadLink);
downloadLink.click();
}
)
}
正在使用 angular8 和 spring 引导下载文件。 Spring 引导服务部分与 Postman 一起工作。但是当我用angular下载时,我得到一个错误。error
它没有出现在 console.log(“文件响应:”,响应)部分。
downloadFile(event) {
this.additionalDocumentService.getFileDownload(event.fileId).subscribe(response => {
console.log("File response:",response)
this.downloadFile = response;
});
}
getFileDownload(fileId: number): Observable<any> {
return this.http.get(apiHost + '/downloadFile/' + fileId);
}
@RequestMapping("/downloadFile/{dosyaId}")
public ResponseEntity<HttpStatus> handleFileDownloadPage(HttpServletRequest request, HttpServletResponse response, @PathVariable(value = "fileId") Integer fileId) throws IOException, Exception {
File file = fileService.getFileId(fileId);
if (StringUtils.hasText(dosya.getFilePath())) {
ServletOutputStream out = response.getOutputStream();
InputStream stream = null;
try {
-
stream = new FileInputStream(file.getFilePath());
int bytesRead = 0;
byte[] buffer = new byte[8192];
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", String.format(" attachment; filename=\"%s\"", file.getFileName()));
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.flush();
} catch (Exception e) {
System.err.println(e.toString());
} finally {
out.close();
if (stream != null) {
stream.close();
}
}
return null;
}
return ResponseEntity.ok(HttpStatus.OK);
}
以下函数将接受任何文件类型和弹出式下载window:
downloadFile(route: string, filename: string = null): void{
const baseUrl = 'http://myserver/index.php/api';
const token = 'my JWT';
const headers = new HttpHeaders().set('authorization','Bearer '+token);
this.http.get(baseUrl + route,{headers, responseType: 'blob' as 'json'}).subscribe(
(response: any) =>{
let dataType = response.type;
let binaryData = [];
binaryData.push(response);
let downloadLink = document.createElement('a');
downloadLink.href = window.URL.createObjectURL(new Blob(binaryData, {type: dataType}));
if (filename)
downloadLink.setAttribute('download', filename);
document.body.appendChild(downloadLink);
downloadLink.click();
}
)
}