我需要通过HTTP请求(其中之一是文件)将某些表单参数发布到服务器。所以我使用Apache HTTP客户端是这样的...Apache Http客户端4表单发布多部分数据
HttpPost httpPost = new HttpPost(urlStr);
params = []
params.add(new BasicNameValuePair("username", "bond"));
params.add(new BasicNameValuePair("password", "vesper"));
params.add(new BasicNameValuePair("file", payload));
httpPost.setEntity(new UrlEncodedFormEntity(params));
httpPost.setHeader("Content-type", "multipart/form-data");
CloseableHttpResponse response = httpclient.execute(httpPost);
服务器返回一个错误,堆栈跟踪是..
the request was rejected because no multipart boundary was found
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:954)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:351)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:156)
我从我需要以某种方式拿出其他职位了解边界,这是在内容中找不到的字符串。但是,我如何在上面的代码中创建这个边界?它应该是另一个参数吗?只需要一个代码示例即可。
好吧,我明白了。对不起,但是当你接受答案时,我认为它是为你工作的。我会用你的发现更新我的答案。 – gustf
嗨,我现在用一个使用构建器的等效代码更新了答案。我还检查了与原始代码的不同之处:1)将addPart(“file”,new FileBody(payload)'放在其他部分之前2)字符集,它在代码中的不建议使用的构造函数中默认为“ASCII” 。而在我原来的默认是'ISO_8859_1'。这通常不应该是任何问题,所以我的想法是,它是第一个也是奇怪的。但是也许这就是'MultipartHttpServletRequest'的工作方式,我不知道。如果你有兴趣和时间来测试它,那将会很棒。 – gustf