需要设置http为兼容模式,否则会使用mime默认的编码(US-ASCII)
设置方式:
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setCharset(Charset.forName("UTF-8"));
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//设置浏览器兼容模式,否则后台接口接收到的文件名中文乱码?????.xlsx
整体代码:Httpclient上传文件流InputStream,使用浏览器兼容模式
private Object uploadRequest(HttpServletRequest servletRequest, String httpUrl, String para, InputStream inputStream, String fileName) {
CloseableHttpClient httpClient = null;
CloseableHttpResponse httpResponse = null;
try {
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
RequestConfig config = RequestConfig.custom().setConnectTimeout(TIMEOUT * 1000).build();
httpClientBuilder.setDefaultRequestConfig(config);
httpClient = httpClientBuilder.build();
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setCharset(Charset.forName("UTF-8"));
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//设置浏览器兼容模式,否则后台接口接收到的文件名中文乱码?????.xlsx
builder.addBinaryBody(para, inputStream, ContentType.MULTIPART_FORM_DATA, fileName);
HttpEntity fileEntity = builder.build();
HttpPost httpPost = new HttpPost(httpUrl);
transferRequestHeaders(httpPost, servletRequest);
httpPost.setEntity(fileEntity);
httpResponse = httpClient.execute(httpPost);
HttpEntity entity = httpResponse.getEntity();
String responseBody = null;
if (entity != null) {
responseBody = EntityUtils.toString(entity, Charset.forName("UTF-8"));
//关闭流
EntityUtils.consumeQuietly(entity);
}
if(responseBody.startsWith("{")) {
return JSONObject.parseObject(responseBody);
}else if(responseBody.startsWith("[")) {
return JSONArray.parseArray(responseBody);
}else {
return responseBody;
}
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
httpResponse.close();
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}