httpclient3.0 上传文件名及field中文解决方法-阿里云开发者社区

开发者社区> 一叶飘舟> 正文

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

简介:
+关注继续查看

最近利用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。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
关于FileZilla上传文件后服务器端文件与本地文件大小不一致的解决方法
最近在调试网站时发现,通过ftp上传工具FileZilla上传至服务器端的文件与本地文件大小不一致,虽然没有影响网站的最终显示效果,但仍让我困惑不解。后发现是传输类型的原因,解决方法如下: 中文版FileZilla菜单栏->传输->传输类型->二进制(Binary) 造成大小不一致的原因:ASCII模式和二进制(Binary)模式的区别是回车换行的处理,Binary模式不对数据进行任何处理,ASCII模式将回车换行转换为本机的回车字符,比如:UNIX下是\n,Windows下是\r\n,Mac下是\r。
1456 0
Maven项目中无法找到 xml文件或 properties文件等配置文件的解决方法
在初次使用 Maven 项目的时候总是会遇到一些比较奇异的问题 就比如说总是会报错:项目里的 **.xml 或 **.properties 配置文件无法找到 这时你去项目中的 classes 生成文件(target 或 out)中找,确实这些配置文件没有被编译 这是因为 ...
1366 0
VS2010无法保存项目文件(.csprj)的问题解决方法
VS2010无法保存项目文件(.csprj)的问题解决方法   【出错提示】保存项目文件“XXX”时出错。类没有注册。正在查找具有CLSID的对象:{D9B3211D-E57F-4426-AAEF-30A806ADD397}。
940 0
Apache2.0版本以上支持中文软件名文件下载
好久没写博文了,今天抽个小空写个故障解决方案吧!不过大多数基本是在网上找的的答案,这里我整理下大致步骤。如果有需要的朋友请参考! 故障描述:外网有一台apache服务器提供软件给客户下载,因为很多软件名是带有中文的,所以下载的时候失败,临时的解决方案是将中文名修改为一个英文名就OK了,但是这只是一时的解决步骤,最终的方案就是让apache支持中文软件名文件下载。
812 0
wordpress上传音频文件,报http错误
问题描述 嫌个人的博客单调,想在wordpress的首页加一首自己喜欢的歌曲,然后游客访问的时候可以听歌,但是wordpress不能上传大数据量的音频或视频文件,报http错误! 解决方案 1.
1411 0
模拟提交有文件上传的表单(通过http模拟上传文件)
通过HTTP模拟GET或POST请求,提交数据到服务端获取响应,比较常见些;但如上传文件到服务端,使用html form当然简单了,而因环境所限有时需要使用模拟方法去提交有附件(文件上传)的表单。我们暂且不说如何去模拟数据,通过一个简单的form看看当请求发生时,客户端提交了什么样的数据给服务端。
1013 0
C# .net中cookie值为中文时的乱码解决方法
一.cookie的名称或子cookie的名称不能为中文,否则无法获得cookie 这个好办,名称不用中文即可 二.cookie的值为中文时候,取cookie的值会出现乱码 解决办法:存取cookie时候先解码和编码 存cookie,进行编码: cookie.
810 0
PHP Header下载文件在IE文件名中文乱码问题
解决PHP Header下载文件在IE文件名中文乱码有两种常见的,一种是是把页面编码改成utf8,另一种是对中文url进入urlencode编码,根据UA检测,区别下载,就可以解决了 $filename = "中文.
1001 0
+关注
1635
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载