【发布时间】:2021-05-19 14:04:38
【问题描述】:
我想在 Angular 中上传一个 zip 文件,并将该 zip 文件发送到后端 (java/micronaut) 并在那里解压。已经完成了一些实现,后端接收 zip 文件,例如。 “File.zip”,但是找不到文件
是否需要添加文件的完整路径?如果是,我怎么能得到它?来自前端还是后端?
角度:
<div style="width: 0px; height: 0px; overflow: hidden;">
<input #fileUploadInput type="file" style="visibility: hidden" accept=".zip"
(change)="uploadFile($event.target.files)">
uploadFile(files: FileList) {
if (!files || files.length !== 1) {
return;
}
this.orderService.importFile(this.order.id, files[0], this.appComponent, success => {
if (success) {
this.loadOrder(this.order.id);
}
});
}
后端(Micronaut)控制器
@Post("/order/import/file/{orderId}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public HttpResponse importOrderFile(
CompletedFileUpload fileUpload,
@Parameter(String orderId) {
try {
service.orderService.importOrder(orderId, fileUpload.getInputStream(), fileUpload.getFilename());
return HttpResponse.ok();
}
catch (IOException e) {
return HttpResponse.badRequest("Bad input");
}
}
服务
public void importOrder(String orderId, InputStream in, String fileName) throws IOException {
Set<String> extractedFiles = getUncompressedFiles(fileName);
Iterator<String> itr = extractedFiles.iterator();
while(itr.hasNext()){
//...
}
}
public Set<String> getUncompressedFiles(String fileZip) throws IOException {
Set<String> files = new HashSet<>();
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(fileZip));
ZipEntry zipEntry = zipIn.getNextEntry();
while (zipEntry != null) {
String zipEntryName = zipEntry.getName();
String fileName = zipEntryName.substring(zipEntryName.indexOf("order-nr"));
files.add(fileName);
zipIn.closeEntry();
zipEntry = zipIn.getNextEntry();
}
zipIn.close();
return files;
}
【问题讨论】:
-
你能分享你上传文件的Angular服务代码吗?
-
对 BE 的 post 请求?
-
是的!用于与后端交互的代码
-
我已经添加了