Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Httpclient3.x使用FileParts上传附件中文附件名乱码问题解决,希望能够帮助你!!!。
最近项目上有一个需求,使用httpclient模拟表单附件上传功能,并携字符串带参数,在上传附件时服务端接收到的附件名称总是乱码,纠结许久,最终看了httpclient源码发现是3.x版本有bug导致
查看FilePart源码,发现代码中强制将文件名称转成了ASCI格式:
出问题的源码截图
出现如上情况,只能通过重写源码的方式处理,下面为我重写后的源代码
在调用的地方之间创建重写的这个对象即可,文件上传代码示例如下所示:
public void upload(String localFile,String descUrl,String token,List<AffixInfo> affixInfos){
File file = new File(localFile);
PostMethod filePost = new PostMethod(descUrl);
HttpClient client = new HttpClient();
//filePost.addRequestHeader("Content-Type", "application/x-www-form-urlencoded");//设置请求头
try {
// 通过以下方法可以模拟页面参数提交
StringPart sp = new StringPart("token",URLEncoder.encode(token, "utf-8") );
FilePartExt filePart = new FilePartExt("fileupload", file);//使用自己重写的类
//FilePart filePart = new FilePart(name, file);
Part[] parts = {sp,filePart};
//filePost.getParams().setContentCharset("UTF-8");
filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
int status = client.executeMethod(filePost);
if (status == HttpStatus.SC_OK) {
System.out.println("上传成功");
String result = filePost.getResponseBodyAsString();
if(StringUtils.isNotEmpty(result)){
JSONObject resultObject = JSONObject.parseObject(result);
String statusRult = resultObject.get("status").toString();
if(StringUtils.equals("1", statusRult)){
String attachName = resultObject.get("attachName").toString();
String fileTime = resultObject.get("fileTime").toString();
String name = resultObject.get("name").toString();
String path = resultObject.get("path").toString();
String size = resultObject.get("size").toString();
String msg = resultObject.get("msg").toString();
AffixInfo affixInfo = new AffixInfo(name, path, size, fileTime);
affixInfos.add(affixInfo);
}
}
} else {
System.out.println("上传失败");
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
filePost.releaseConnection();
}
}
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章