当前位置: 首页 > 知识库问答 >
问题:

使用FormDataMultiPart发送实体和文件

南宫胡媚
2023-03-14
@PostMapping("/upload")
public void upload(@RequestParam("dto") MyDto dto,
                      @RequestParam("file") MultipartFile file) {
    ...
}

mydto.java:

@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyDto implements Serializable {

    private String f1;
    private String f2;

}

我的当事人:

FormDataMultiPart formDataMultiPart = new FormDataMultiPart();

FileDataBodyPart fileDataBodyPart = new FileDataBodyPart("file",
                new File("C:/dev/test.txt"),
                MediaType.APPLICATION_OCTET_STREAM_TYPE);

 MyDto dto = new MyDto();
 dto.setF1("f1");
 dto.setF2("f2");

 final FormDataMultiPart multipart = (FormDataMultiPart) formDataMultiPart
                .field("dto", dto, MediaType.APPLICATION_JSON_TYPE) // if I change to string type works fine;
                .bodyPart(fileDataBodyPart);

Response response = ClientBuilder.newClient()
    .target(String.format("%s%s", "http://localhost:8080", "/api/upload"))
    .register(MultiPartFeature.class)
    .request(MediaType.APPLICATION_JSON)
    .header("Authorization", "Bearer " + token.getToken())
    .post(Entity.entity(multipart, multipart.getMediaType()));

响应->InboundJaxrsResponse{context=clientresponse{method=post,uri=http://localhost:8080/api/upload,status=500,reason=内部服务器错误}}

共有1个答案

太叔景同
2023-03-14

您需要创建包装类以获取文件以及表单数据并将其与表单绑定

public class MyDtoWrapper implements Serializable {

    private String f1;
    private String f2;
    private MultipartFile image;

}

控制器

@PostMapping("/api/upload/multi/model")
public ResponseEntity<?> multiUploadFileModel(@ModelAttribute MyDtoWrapper model) {
    try {
           saveUploadedFile(model.getImage()); // Create method to save your file or just do it here
           formRepo.save(mode.getF1(),model.getF2()); //Save as you want as per requirement 
        } catch (IOException e) {
           return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
        }
    return new ResponseEntity("Successfully uploaded!", HttpStatus.OK);
}

完整的示例请看这里。

 类似资料:
  • 由于Android开发人员建议使用类,我想知道是否有人能为我提供一个很好的例子,说明如何通过POST将位图“文件”(实际上是内存流)发送到Apache HTTP服务器。我对cookie、身份验证或任何复杂的东西都不感兴趣,但我只想有一个可靠的逻辑实现。我在这里看到的所有例子看起来更像是“让我们试试这个,也许它会奏效”。 现在,我有以下代码: 其中showDialog应该只显示一个(如果URL无效?

  • 我正在使用cURL命令行实用程序向web服务发送HTTPPOST。我想包括一个文件的内容作为文章的主体实体。我试过使用

  • 我正在尝试用tweepy制作一个Twitter机器人。这实际上是我的第一个推特BOT,我对它有点陌生。 我有一个媒体列表,其中包含我需要发送的每个图像的路径。我可以用文本发送推文 或通过单一媒体发送推文 但是我需要用我的推文发送许多图像。我听说我需要先上传我的文件,但我不知道如何将它们集成到推文中。或者也许有另一种方法可以做到这一点?

  • 我有一个api URL:https://orderingspace.com/api/search Body parameter:lat:48.8834553 log:2.3399433 miles:6

  • 问题内容: 因此,大约一个月前,我问了一个有关超级代理和发送文件的问题,但没有任何反应。我仍然喜欢找出使用超级代理的方法。 我可以使用纯Ajax发送文件: 但是,当我在超级代理中尝试相同的操作时,没有任何效果: 谁能告诉我发生了什么事。 问题答案: 这应该工作。

  • 问题内容: 我有一个看起来像这样的表格(简化): 在我的文件中,我使用以下代码来发送电子邮件: 电子邮件正确发送了正文,但没有附件。 我的问题 我需要将表单中的文件附加到电子邮件中并发送出去。脚本通过电子邮件发送文件后,我不在乎保存文件。 我知道我需要在某处(我假设在此行下)添加附件以进行发送。但… 我要放在文件顶部的什么位置才能拉入文件?像是用来从contact-us.php页面提取文件的东西吗