我想创建一个接受两个对象(作为JSON)并允许上传多个文件的API。


上传文件是可选的。即一个请求中可能包含一个或多个文件,也可能没有。


我在下面的尝试代码中使用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。

对不起,但是我希望这会让您失望太多...

09-10 07:18
查看更多