apache httpclient3 httpclient4 上传文件名乱码问题
2013-10-19 11:40
387 查看
httpclient3解决方式:写一个FilePart实现
httpclient4解决方式:以浏览器兼容模式执行
package com.wxl.app; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import org.apache.commons.httpclient.methods.multipart.FilePart; import org.apache.commons.httpclient.methods.multipart.PartSource; import org.apache.commons.httpclient.util.EncodingUtil; public class CustomFilePart extends FilePart { public CustomFilePart(String name, PartSource partSource) { super(name, partSource); } public CustomFilePart(String name, File file, String contentType, String charset) throws FileNotFoundException { super(name, file, contentType, charset); } public CustomFilePart(String name, File file) throws FileNotFoundException { super(name, file); } public CustomFilePart(String name, PartSource partSource, String contentType, String charset) { super(name, partSource, contentType, charset); } public CustomFilePart(String name, String fileName, File file, String contentType, String charset) throws FileNotFoundException { super(name, fileName, file, contentType, charset); } public CustomFilePart(String name, String fileName, File file) throws FileNotFoundException { super(name, fileName, file); } protected void sendDispositionHeader(OutputStream out) throws IOException { super.sendDispositionHeader(out); String filename = getSource().getFileName(); if (filename != null) { out.write(EncodingUtil.getAsciiBytes(FILE_NAME)); out.write(QUOTE_BYTES); //使用UTF-8编码 out.write(EncodingUtil.getBytes(filename, "UTF-8")); out.write(QUOTE_BYTES); } } }
package com.wxl.app; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.multipart.FilePart; import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity; import org.apache.commons.httpclient.methods.multipart.Part; import org.apache.commons.httpclient.methods.multipart.StringPart; import org.apache.commons.httpclient.params.HttpMethodParams; public class ClientMultipartFormPost { public static void main(String[] args) throws FileNotFoundException { StringPart name = new StringPart("name", "张三", "UTF-8"); //使用自定义的FilePart,防止文件名乱码。 FilePart file = new CustomFilePart("file", new File("c:/测试.txt")); PostMethod filePost = new PostMethod("http://localhost:8080" + "/j2ee/simple"); filePost.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE, true); MultipartRequestEntity reqEntity = new MultipartRequestEntity(new Part[] { name, file }, filePost.getParams()); filePost.setRequestEntity(reqEntity); HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(5000); try { int statusCode = client.executeMethod(filePost); System.out.println(HttpStatus.getStatusText(statusCode)); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { filePost.releaseConnection(); } } }
httpclient4解决方式:以浏览器兼容模式执行
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null, Charset.forName("UTF-8"));
package com.wxl.app; import java.io.File; import java.nio.charset.Charset; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; /** * Example how to use multipart/form encoded POST request. */ public class ClientMultipartFormPost { public static void main(String[] args) throws Exception { HttpClient httpclient = new DefaultHttpClient(); try { HttpPost httppost = new HttpPost("http://localhost:8080" + "/j2ee/simple"); FileBody file = new FileBody(new File("c:/测试.txt"), "application/octet-stream", "UTF-8"); StringBody name = new StringBody("张三", Charset.forName("UTF-8")); //以浏览器兼容模式运行,防止文件名乱码。 MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null, Charset .forName("UTF-8")); reqEntity.addPart("file", file); reqEntity.addPart("name", name); httppost.setEntity(reqEntity); System.out.println("executing request " + httppost.getRequestLine()); HttpResponse response = httpclient.execute(httppost); HttpEntity resEntity = response.getEntity(); System.out.println("----------------------------------------"); System.out.println(response.getStatusLine()); if (resEntity != null) { System.out.println("Response content length: " + resEntity.getContentLength()); } EntityUtils.consume(resEntity); } finally { try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) { } } } }
相关文章推荐
- Java中FTPClient上传中文目录、中文文件名乱码问题解决方法
- HttpClient上传文件到微信素材乱码问题解决
- java httpclient文件上传,springmvc作为服务器端接收文件,以及上传中文件名乱码的解决方法
- HttpClient4.4.1 关于文件上传 中文文件名编码问题
- 【HTTPClient 系列】HttpClient4.2.5上传文件,无中文文件名问题
- httpclient上传文件,同时带字符串参数 中文乱码问题
- org.apache.commons.httpclient.HttpClient请求乱码问题
- FTPClient上传 中文目录、中文文件名乱码问题
- httpclient post 上传文件及参数包括中文乱码问题方案
- Java httpclient请求,解决乱码问题
- java HTTPClient PostMethod 中文乱码问题解决方法
- 使用apache的TelnetClient实现java向telnet服务器发送命令并显示数据(解决乱码问题)
- WordPress上传中文文件名或图片名乱码问题
- httpclient3.1上传文件中文名乱码解决
- 关于HttpClient 获取页面,出现乱码的问题
- MultipartHttpServletRequest,ajaxFileUpload上传文件,读取文件乱码问题
- FCKeditor for Java 中文文件名文件上传乱码问题
- 因HTTP的Header长度过长导致下载文件名出现乱码的问题
- android开发问题-关于Xutils框架出现无法访问HttpRequestBase 找不到org.apache.http.client.methods.HttpRequestBase解决方案
- 解决c# httpClient进行PostAsync()后返回数据中文乱码问题