java - 有没有办法按附件的内容类型过滤请求(多部分/表单数据)?

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

我正在 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 8 Stream 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) {

}

                            }

关于java - 有没有办法按附件的内容类型过滤请求(多部分/表单数据)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57609858/

相关文章:

java - 如何模拟 SecurityContext

java - Jersey - 错误处理的内容协商

java - 使用ThreadPool顺序执行类似的任务

json - Spring rest 模板无法从 text/html 转换

java - 我如何能够在类中引用实例的私有(private)字段?

java - Spring REST 3 支持 XML 和 JSON

rest - 为什么 HTTP 选项请求不安全

java - 如何在 REST API 中表达查询参数之间的高级表达式?

java - 小程序删除图像

java - 是否有一个支持 fetchSize 的 mysql JDBC?