【问题标题】:Is there any way to filter request (multipart/form-data) by content-type of attached file?有没有办法按附件的内容类型过滤请求(多部分/表单数据)?
【发布时间】:2019-08-22 12:55:01
【问题描述】:

我正在开发基于 Java 的 Web 后端,它允许上传具有“multipart/form-data”内容类型和附加文件的文件。对于 API 部分,我使用 JAX-RS。我想对附件的不同内容类型使用不同的 API 方法。例如,对于“application/pdf”我想使用uploadDocument 方法,对于“application/json”我想使用uploadData 方法。

@POST
@Consumes("multipart/form-data")
void uploadDocument(@Multipart("file") File file);

@POST
@Consumes("multipart/form-data")
void uploadData(@Multipart("file") File file);

那么,我可以根据附件内容类型过滤请求吗?

附:如果你不明白,请描述什么,我会解释更多。

【问题讨论】:

    标签: java rest jax-rs multipartform-data media-type


    【解决方案1】:

    只有这只是实现的想法

    • 你可以使用 java 8 流 API 来简单地做到这一点
    @PostMapping(
          value = "/uploadDocuments",
          consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
      public void uploadDocument(
          @RequestParam(required = true) MultipartFile[] file,) {
    
        try {
    
          Arrays.asList(files).stream()
              .filter(
                  x ->
                      FilenameUtils.getExtension(x.getOriginalFilename()).equals("pdf")
                          || FilenameUtils.getExtension(x.getOriginalFilename()).equals("txt"))
              .forEach(
                  x -> {
                    try (BufferedReader reader =
                        new BufferedReader(
                            new InputStreamReader(
                                new ByteArrayInputStream(x.getBytes()),
                                "UTF-8"))) {
                      Supplier<Stream<String>> fileContentStream = reader::lines;
                      if (FilenameUtils.getExtension(x.getOriginalFilename()).equals("pdf")) {
    
                        String[] fileReadLines =
                            fileContentStream
                                .get()
                                .skip(1)// you can skip any line with this action
                                .map(firstLine -> firstLine.split(","))// you can use this seperate your line if you want to split
                                .findFirst()
                                .orElse(null);
    
    
    
                                }
                                else if (FilenameUtils.getExtension(x.getOriginalFilename()).equals("csv")) {
    
    //Like above , I have added , you can do here for various file format 
    
     } catch (Exception ex) {
    
    }
    
                                }
    
    

    【讨论】:

      猜你喜欢
      • 2020-02-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 2019-10-29
      • 2014-06-01
      • 1970-01-01
      • 2017-02-15
      相关资源
      最近更新 更多