我想创建一个 API,它接受两个对象(作为 JSON)并允许上传多个文件。
- 上传文件是可选的。即,请求中可能包含也可能不包含一个或多个文件。
我在下面尝试的代码中使用 spring boot
@RequestMapping(value = "/some-action", method = RequestMethod.POST)
public void post(@RequestPart(value = "jsonString") String jsonAsString,
@RequestPart(value = "file", required = false) MultipartFile[] files,
HttpServletResponse response)
我接受jsonAsString
因为我无法接受对象。因此,为了临时解决方案,我传递 json 字符串。
现在,正如您在上面的代码中看到的 file
我设置了required
至false
。但是,当我没有传递任何文件时,我收到服务器错误。
下面是我的请求正文。
--ARCFormBoundaryer1k80a5e1att9
Content-Disposition: form-data; name="text"
"{"key":"value"}"
--ARCFormBoundaryer1k80a5e1att9--
以下是我收到的错误。
org.apache.tomcat.util.http.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly
at org.apache.tomcat.util.http.fileupload.MultipartStream.readHeaders(MultipartStream.java:487) ~[tomcat-embed-core-8.0.23.jar:8.0.23]
at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:889) ~[tomcat-embed-core-8.0.23.jar:8.0.23]
at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:854) ~[tomcat-embed-core-8.0.23.jar:8.0.23]
at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256) ~[tomcat-embed-core-8.0.23.jar:8.0.23]
at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280) ~[tomcat-embed-core-8.0.23.jar:8.0.23]
at org.apache.catalina.connector.Request.parseParts(Request.java:2730) ~[tomcat-embed-core-8.0.23.jar:8.0.23]
请建议我怎样做才能满足我的要求。
最佳答案
我想我明白你想做什么。我们尝试过类似的事情。不幸的是,由于处理文件上传的方式与 POST 上正常数据有效负载的方式不同,您可能必须使用不同的 URL。
我们让它在一个浏览器中运行(不记得是哪个),但它很不稳定。这有点像重载 URL。
抱歉,但我希望这会让您失望......
关于java - Spring boot API 接受 JSON(强制)和多部分文件(可选),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892584/