說明:使用的httpClient version 為4.3.6?
最近寫一個項目,需要上傳附件渡贾,發(fā)現(xiàn)后臺解析時中文是亂碼仙辟,一開始以為是字符編碼問題扰才,網(wǎng)上差了n多資料允懂,沒解決問題,折騰了1天衩匣,終于搞定問題蕾总,直接上代碼。
public class UpLoadDemo { @Test public void testImport() { File file1 = new File("C:\\Users\\Thinkpad\\Desktop\\pics\\測試1.jpg"); File file2 = new File("C:\\Users\\Thinkpad\\Desktop\\pics\\測試2.jpg"); List fileList = new ArrayList<>();
? ? ? ? fileList.add(file1);
? ? ? ? fileList.add(file2);
? ? ? ? CloseableHttpClient client = HttpClients.createDefault();
? ? ? ? String responseContent = null; // 響應內(nèi)容
? ? ? ? CloseableHttpResponse response = null;
? ? ? ? String uploadurl =
? ? ? ? ? ? ? ? "http://localhost:8081/id-shadow/id-shadow/1.0/bucketUser/bucketDataImport" +
? ? ? ? ? ? ? ? ? ? ? ? "/bucketCode/5a55e4848922304e98c4b5ec/block_id/1233/partnerCode/201608304777/outOrderId/" + System.currentTimeMillis();
? ? ? ? HttpPost post = new HttpPost(uploadurl);
? ? ? ? MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);
// multipartEntityBuilder.setCharset(Charset.forName(HTTP.UTF_8));
//設(shè)置請求的編碼格式,填坑舵揭,遇到亂碼時谤专,第一錯覺就是設(shè)置請求的編碼格式躁锡,如果設(shè)置這個編碼午绳,會導致多文件丟失(具體原因不明)
?// multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
//設(shè)置瀏覽器兼容模式 ,填坑映之,網(wǎng)上好多文章說拦焚,設(shè)置成BOWSER_COMPATIBLE 就不會亂碼了,問題就出現(xiàn)在這里杠输,設(shè)置模式時赎败,應該設(shè)置成HttpMultipartMode.RFC6532 才沒有出現(xiàn)亂碼
? ? ? ? try {
? ? ? ? ? ? for (int i = 0;i< fileList.size();i++) {
? ? ? ? ? ? ? ? File file = fileList.get(i);
? ? ? ? ? ? ? ? multipartEntityBuilder.addBinaryBody("file" + i,file);
? ? ? ? ? ? }
? ? ? ? ? ? HttpEntity reqEntity = multipartEntityBuilder.build();
? ? ? ? ? ? post.setEntity(reqEntity);
? ? ? ? ? ? response = client.execute(post);
? ? ? ? ? ? if (response.getStatusLine().getStatusCode() == 200) {
? ? ? ? ? ? ? ? HttpEntity entity = response.getEntity();
? ? ? ? ? ? ? ? responseContent = EntityUtils.toString(entity, "UTF-8");
? ? ? ? ? ? ? ? JSONObject object = JSONObject.parseObject(responseContent);
? ? ? ? ? ? ? ? System.out.print(responseContent);
? ? ? ? ? ? ? ? boolean isSuccess = object.getJSONObject("result").getBoolean("success");
? ? ? ? ? ? ? ? if (isSuccess) {
? ? ? ? ? ? ? ? ? ? JSONArray arr = object.getJSONArray("data");
? ? ? ? ? ? ? ? ? ? // todo 內(nèi)部邏輯實現(xiàn)
? ? ? ? ? ? ? ? ? ? // doSomething()
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } finally {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? if (response != null)
? ? ? ? ? ? ? ? ? ? response.close();
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? } finally {
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? if (client != null)
? ? ? ? ? ? ? ? ? ? ? ? client.close();
? ? ? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}