我需要通過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