如何将文件从 Quarkus 发送到 Spring Boot 应用程序?
How to send a file from Quarkus to a Spring Boot application?
我正在编写一个 Quarkus 微服务,旨在与主 Spring 引导应用程序通信。
为了调用 Spring Boot 应用程序,我基于此 Quarkus tutorial 编写了一个 REST 客户端,它在某些端点上运行良好。
当我尝试将文件从 Quarkus 上传到 Spring 引导时,问题发生了,我无法让它正常工作。我按照 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 引导应用程序中的端点:
@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
如果我将 @RequestParam
更改为 @RequestBody
,则 inputFile
参数始终为 null
。我错过了什么?
正在尝试使用 MultipartFormDataOutput
class,缺少多部分表单数据字段 文件名。在您的情况下,尝试使用 @PartFilename
注释。
Must be used in conjunction with @MultipartForm. This defines the filename for a part
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
}
我正在编写一个 Quarkus 微服务,旨在与主 Spring 引导应用程序通信。
为了调用 Spring Boot 应用程序,我基于此 Quarkus tutorial 编写了一个 REST 客户端,它在某些端点上运行良好。 当我尝试将文件从 Quarkus 上传到 Spring 引导时,问题发生了,我无法让它正常工作。我按照 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 引导应用程序中的端点:
@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
如果我将 @RequestParam
更改为 @RequestBody
,则 inputFile
参数始终为 null
。我错过了什么?
正在尝试使用 MultipartFormDataOutput
class,缺少多部分表单数据字段 文件名。在您的情况下,尝试使用 @PartFilename
注释。
Must be used in conjunction with @MultipartForm. This defines the filename for a part
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
}