如何解决Angular 10 上传zip,获取路径
我想在 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;
}
解决方法
您假设文件在文件系统上并且其名称是存储文件的名称。
根据您的配置,该文件可能只存在于内存中。对于文件存储在文件系统上的情况,其名称与从 fileUpload.getFilename()
返回的名称不匹配。该方法返回客户端报告的文件名称。
您的 getUncompressedFiles(String fileZip)
方法应该传递文件的输入流,并且应该使用它而不是 new FileInputStream(fileZip)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。