ccl*_*tti 14 java rest file-upload spring-boot
我想知道是否有可能接受包含多部分文件以及其他数据的json有效负载的后端点.例如我的身体物体看起来像:
public class Bio {
private Long id;
private String firstName;
private MultipartFile imageFile;
}
Run Code Online (Sandbox Code Playgroud)
一个单独但相关的问题是,在用于上传文件的springboot doc示例中,https://spring.io/guides/gs/uploading-files/,该文件是请求路径的一部分而不是有效负载.这对我来说似乎很奇怪,有没有办法让文件绑定到请求体?
And*_*son 17
我过去这样做的方法是上传两个单独的部分,一个用于文件,另一个用于随附的JSON.你的控制器方法看起来像这样:
public void create(@RequestPart("foo") Foo foo,
@RequestPart("image") MultipartFile image)
// …
}
Run Code Online (Sandbox Code Playgroud)
然后它将消耗如下所示的请求:
Content-Type: multipart/mixed; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name="foo"
Content-Type: application/json;charset=UTF-8
{"a":"alpha","b":"bravo"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name="image"; filename="foo.png"
Content-Type: application/octet-stream
Content-Length: 734003
<binary data>
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Run Code Online (Sandbox Code Playgroud)
Andy使用@RequestPart的解决方案非常有效.但是不能用postman验证,因为它似乎不支持,指定每个多部分的内容类型以正确设置边界,如他的答案中所述.
因此,要使用curl命令附加有效负载和文件,这样的事情就可以了.
curl -i -X POST -H "Content-Type: multipart/mixed" \
-F "somepayload={\"name\":\"mypayloadname\"};type=application/json" \
-F "uploadfile=@somevalid.zip" http://localhost:8080/url
Run Code Online (Sandbox Code Playgroud)
确保转义有效负载内容,somevalid.zip应该在执行curl的同一目录中,或者用文件的有效路径替换它.