public static String postUpload(String url, String fileField, String fileRealPath,
Map<String,String> params, Map<String,String> headerMap){
HttpPost httppost = new HttpPost(url);
MultipartEntityBuilder meb = MultipartEntityBuilder.create();
meb.setCharset(Charset.forName("utf-8"));
meb.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
FileBody fileBody = new FileBody(new File(fileRealPath));
meb.addPart(fileField, fileBody);//添加文件
if(null != params){
//添加map中参数
Set<String> keySet = params.keySet();
for(String key : keySet){
StringBody contentBody = new StringBody(params.get(key), ContentType.TEXT_PLAIN);
meb.addPart(key, contentBody);
}
HttpEntity reqEntity = meb.build();
httppost.setEntity(reqEntity);
}
return excuteRequest(httppost, headerMap);
}
方法一:
加上这两行代码
meb.setCharset(Charset.forName("utf-8"));
meb.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
方法二:(还没试,应该可行)
对包含中文路径url进行编码后在传
方法一和方法二都要在接收接收文件那边对文件名进行url解码
url编码和解密方法
/**
* 将URL中含有的中文转换为ascii;
* 例:"中文乱码" 转换为 "%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81"
* utf8URL编码
* @param text
* @return
*/
public static String utf8UrlEncode(String text){
StringBuffer result=new StringBuffer();
for(int i=0;i<text.length();i++){
char c=text.charAt(i);
if(c>=0 && c<=255)
result.append(c);
else{
byte[] b=new byte[0];
try {
b=Character.toString(c).getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
for(int j=0;j<b.length;j++){
int k=b[j];
if(k<0)
k+=256;
result.append("%"+Integer.toHexString(k).toUpperCase());
}
}
}
return result.toString().replaceAll(" ","%20");
}
/**
* 将URL的中乱码(ascii码)转换为中文的URL
* 例: "%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81" 转换为"中文乱码"
* @param text
* @return
* @throws UnsupportedEncodingException
*/
public static String utf8UrlDecoder(String text) throws UnsupportedEncodingException{
return URLDecoder.decode(text, "utf-8");
}