【问题标题】:Angular 10 upload zip, get pathAngular 10上传zip,获取路径
【发布时间】: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 请求?
  • 是的!用于与后端交互的代码
  • 我已经添加了

标签: java angular micronaut


【解决方案1】:

您假设文件在文件系统上,并且它的名称是存储文件的名称。

根据您的配置,该文件可能仅存在于内存中。对于文件存储在文件系统上的情况,其名称与fileUpload.getFilename() 返回的名称不匹配。该方法返回客户端报告的文件名。

您的 getUncompressedFiles(String fileZip) 方法应该改为传递文件的输入流,并且应该使用它而不是 new FileInputStream(fileZip)

【讨论】:

    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2020-09-22
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多