WEB开发网
开发学院WEB开发Jsp httpclient3.0 上传文件名及field中文解决方法 阅读

httpclient3.0 上传文件名及field中文解决方法

 2008-01-05 18:49:35 来源:WEB开发网   
核心提示:最近利用httpclient来做模拟表单提交的程序,发现这个咚咚对中文的支持实在是差,httpclient3.0 上传文件名及field中文解决方法,查看源码后发现问题出现在org\apache\commons\httpclient\util这个包里的EncodingUtil.java,和org\apache\comm

最近利用httpclient来做模拟表单提交的程序,发现这个咚咚对中文的支持实在是差,查看源码后发现问题出现
在org\apache\commons\httpclient\util这个包里的EncodingUtil.java,和org\apache\commons\httpclient\methods\multipart这个包里的StringPart.java及FilePart.java这三个类里面。

先说说EncodingUtil这个类,虽然你可以在第50行看到
PRivate static final String DEFAULT_CHARSET = "iso-8859-1";
这样的定义,但你在往下看就会发现getAsciiBytes(final String data)这个里并没有用这定义的编码来对数据进行encoding.而是用了US-ASCII码来进行encoding的。程序如下:
public static byte[] getAsciiBytes(final String data) {

   if (data == null) {
       throw new IllegalArgumentException("Parameter may not be null");
     }

   try {
       return data.getBytes("US-ASCII");  //就是这一句拉
     } catch (UnsupportedEncodingException e) {
       throw new HttpClientError("HttpClient requires ASCII support");
     }
   }


把编码该成你自己想要的吧。在这里解决了上传文件名为中文的问题。接下来解决field字段内容为中文的的问题
修改StringPart中58行:
 public static final String DEFAULT_CHARSET = "US-ASCII";
同理,改成你自己想要的编码
然后重新编译打包。记得把logging 和codec 这两个包引进项目里。否则编译会出一堆错误。

其实在StringPart这个类里是提供了自定义编码格式的方法。可是在FilePart类里没有实现而已。
第79行:
public StringPart(String name, String value, String charset) {

   super(
       name,
       DEFAULT_CONTENT_TYPE,
       charset == null ? DEFAULT_CHARSET : charset,
       DEFAULT_TRANSFER_ENCODING
     );
     if (value == null) {
       throw new IllegalArgumentException("Value may not be null");
     }
     if (value.indexOf(0) != -1) {
       // See RFC 2048, 2.8. "8bit Data"
       throw new IllegalArgumentException("NULs may not be present in string parts");
     }
     this.value = value;
   }
你可以在FilePart里把这个方法实现了。这样你就可以指定编码格式提交表单了。个人觉得这个方法比修改默认编码强。灵活性高些。

其实我只想模拟表单提交,在applet中实现文件上传,本想偷懒不自己写模拟表单提交这块的。用了httpclient这个开源包。可是打完applet的jar包发现这个包竟然350多k。让我非常的郁闷。看来还是需要自己写模拟表单实现提交了。起码打完包也不会超过20k。

假如需要转载,请注明出处和作者。谢谢
QQ:221704
MSN:flyly@yeah.net
EMAIL:zhangfl@sports.cn


Tags:httpclient 上传 文件名

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接