HttpClient4 上传文件中文乱码问题

2017-07-30  本文已影响0人  Aniwhel

使用HttpClient上传文件,如文件名为中文,会出现中文乱码问题,解决方法如下:

  1. 添加上传格part为UTF-8编码和浏览器兼容格式
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setCharset(Charset.forName("UTF-8"));//设置请求的编码格式
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//设置浏览器兼容模式
  1. 表单数据设置编码
StringBody stringBody = new StringBody("中文乱码", contentType);
builder.addPart("test", stringBody);   

举例如下:

public boolean uploadFiles(String url, File file, Map<String, String> params) throws Exception {

        ContentType contentType = ContentType.create("application/octet-stream", "UTF-8");
        HttpClient client = HttpClientBuilder.create().build();// 开启一个客户端 HTTP 请求
        HttpPost post = new HttpPost(url);//创建 HTTP POST 请求

        /// 关注builder的操作
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.setCharset(Charset.forName("UTF-8"));//设置请求的编码格式
        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//设置浏览器兼容模式

        builder.addBinaryBody("file", file);
        builder.addTextBody("method", params.get("method"));//设置请求参数
        builder.addTextBody("fileTypes", params.get("fileTypes"));//设置请求参数
        StringBody stringBody = new StringBody("中文乱码", contentType);
        builder.addPart("test", stringBody);

        HttpEntity entity = builder.build();// 生成 HTTP POST 实体
        post.setEntity(entity);//设置请求参数
        HttpResponse response = client.execute(post);// 发起请求 并返回请求的响应
        if (response.getStatusLine().getStatusCode() == 200) {
            return true;
        }
        return false;
    }
上一篇下一篇

猜你喜欢

热点阅读