微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Angular 10 上传zip,获取路径

如何解决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 举报,一经查实,本站将立刻删除。