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

使用来自angular4的@RequestPart在一个请求中发布多部分文件和json

林涵映
2023-03-14

我使用Jhipster,这是一个控制器方法:

控制器:

@RequestMapping(value = UPLOAD_URL, method = {RequestMethod.POST},
        headers = {"content-type=multipart/mixed", "content-type=multipart/form-data"},
        consumes = {"multipart/form-data"})
    public ResponseEntity<?> uploadWithMetaData(@RequestPart(value = "file") MultipartFile file,
                                                @RequestPart(value = "documentDTO") DocumentDTO documentDTO,
                                                Locale locale) throws IOException, URISyntaxException, JSONException {
  // business logic
}

本质上,我想发布一个文件和一个json对象。

DocumentDTO documentDTO = getDocumentDTOMockFile();
Long originId = originRepository.findAll().stream().findFirst().get().getId();
documentDTO.setOriginId(originId);

MockMultipartFile jsonFile = new MockMultipartFile("documentDTO", "", "application/json",
jsonUtils.toJson(documentDTO, null).getBytes());

restClientMockMvc
      .perform(MockMvcRequestBuilders.fileUpload("/api/v1/documents/upload")
                .file(fstmp)
                .file(jsonFile))
            .andDo(MockMvcResultHandlers.log())
            .andExpect(status().isOk());

}
let fd: FormData = new FormData();
let file = fileForm.files[0];

fd.append("file", file);

let documentDTO = JSON.stringify(document);

fd.append("documentDTO",new Blob([JSON.stringify({
     "documentDTO": documentDTO})], {
         type: "application/json"
    })
);

his.httpClient.post("/api/v1/documents/upload", fd ).subscribe(request => {
   console.log("request", request);
});

请求负载的外观如下:

这是Spring Boot日志消息:

已解决的由处理程序执行引起的异常:org.springframework.web.multipart.support.MissingServletRequestPartException:所需的请求部分“file”不存在

{
  "type" : "http://www.jhipster.tech/problem/problem-with-message",
  "title" : "Bad Request",
  "status" : 400,
  "detail" : "Required request part 'file' is not present",
  "path" : "///api/v1/documents/upload",
  "message" : "error.http.400"
}
  • 将content-type设置为“content-type”:“multipart/mixed”=>结果相同
  • 使用@modelattribute=>相同错误
  • 创建带有dto和文件的pojo
  • 然后检查是否有多部分解析器,明白了

我没主意了,有人有什么建议吗?

共有1个答案

金阳曜
2023-03-14

将JavaScript作为多部分表单发布,并使用如下内容:

    final WebRequest webRequest,
    @RequestParam("fileContent") final MultipartFile fileContent,
    @RequestParam("inputJson") String inputJsonString

作为参数。

如果需要访问会话,webrequest非常有用。

 类似资料:
  • 在我正在开发的React web应用程序中,有一个包含一些用户数据的文件上传部分。然而,当我试图上传文件时,服务器抛出以下错误。 组织。阿帕奇。公猫util。http。文件上传。FileUploadException:请求被拒绝,因为找不到多部分边界 反应侧 我的Spring Boot控制器如下所示。

  • 问题内容: 我需要进行API调用,以上传文件以及带有有关文件详细信息的JSON字符串。 我正在尝试使用python请求库来执行此操作: 这将引发以下错误: 如果我从请求中删除“文件”,则它可以工作。 如果我从请求中删除了“数据”,它将起作用。 如果我不将数据编码为JSON,则可以使用。 因此,我认为错误与在同一请求中发送JSON数据和文件有关。 关于如何使它工作的任何想法? 问题答案: 不要使用j

  • 我正在开发基于Spring 3.2的RESTful服务。我遇到了一个控制器处理混合多部分HTTP请求的问题,第二部分是XML或JSON格式的数据,第二部分是图像文件。 我正在使用@Request estPart注释来接收请求 User.java会这样- 据我所知,使用@RequestPart注释,我希望根据XML多部分部分的内容类型对其进行评估,并最终将其解编组到我的用户类中(我使用的是Jaxb2

  • 我试图在同一个API请求中发布正文和部分数据 如下所示 但它不起作用,我出错了 @正文参数不能与窗体或多部分编码一起使用。(参数#1) 完成错误日志 07-31 05:01:01.644 6315-6315/android.os.E/AndroidRuntime: FATAL EXCEPTION: main Process:ooper.loop, PID: 6315ooper.java:135Ru

  • 我试图复制下面的POST请求使用Python中的请求模块: 请求文档建议使用files参数。 当我尝试以下呼叫: 我得到以下HTTP请求: 我还尝试使用数据参数: 导致以下HTTP请求: 我遇到的问题是,使用files参数会导致服务器无法识别调用,可能是由于HTTP请求中发送了意外的“filename”信息。使用数据参数发送错误的内容类型标题。 已知第一个请求正在我希望将请求发送到的服务器上工作-

  • 我正在传递多部分文件与其他用户信息。无法将类型的属性值转换为属性嵌套异常为 下面的代码我已经试过了 控制器类 @RequestMapping(value=RestMappingURLS.user.saveUser,headers={“Content-Type=Multipart/Mixed”,“Content-Type=Multipart/Form-Data”})public RestRespon