0

我正在编写一个用于与主 Spring Boot 应用程序通信的 Quarkus 微服务。

为了调用 Spring Boot 应用程序,我基于这个Quarkus 教程编写了一个 REST 客户端,它在某些端点上运行良好。当我尝试将文件从 Quarkus 上传到 Spring boot 时,就会出现问题,我无法让它正常工作。我按照this other tutorial处理多部分请求。

这是我的 Quarkus 应用程序上的多部分对象:

public class MultipartBody {
    @FormParam("file")
    @PartType(MediaType.APPLICATION_OCTET_STREAM)
    public InputStream file;

    @FormParam("fileName")
    @PartType(MediaType.TEXT_PLAIN)
    public String fileName;
}

这是 Quarkus 中 REST 客户端上的端点:

@POST
@Path("/file")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
ProjectFile upload(@HeaderParam(AUTH_HEADER) String apiToken, @MultipartForm MultipartBody data);

下面是我构建 MultipartBody 对象的方法:

    InputStream stream = IOUtils.toInputStream(contentString, Charset.defaultCharset());
    MultipartBody data = MultipartBody.builder()
            .file(stream)
            .fileName(filename)
            .build();

Spring Boot 应用程序中的端点:

@PostMapping("/file")
public ProjectFile receive(@RequestParam MultipartFile inputFile)

它抛出一个错误,说inputFile没有提供:

Required request part 'inputFile' is not present - org.springframework.web.multipart.support.MissingServletRequestPartException - Required request part 'inputFile' is not present

如果我更改@RequestParamfor @RequestBody,则inputFile参数始终为null。我错过了什么?

4

1 回答 1

1

尝试使用MultipartFormDataOutput类,多部分表单数据字段缺少文件名。在您的情况下,尝试使用@PartFilename注释。

必须与@MultipartForm 一起使用。这定义了零件的文件名

try (InputStream fileInputStream = new FileInputStream(currentFile)) {

  MultipartFormDataOutput multipartFormDataOutput = new MultipartFormDataOutput();

  multipartFormDataOutput.addFormData("file", fileInputStream, MediaType.APPLICATION_OCTET_STREAM_TYPE, currentFile.getName());
  
  multipartFormDataOutput.addFormData("metaData",objectMapper.writeValueAsString(fileMeta),MediaType.APPLICATION_JSON_TYPE);

  // Call client to upload file

} 
于 2021-09-18T15:03:05.753 回答