轻松把玩HttpClient之封装HttpClient工具类(九),添加多文件上传功能

本文介绍了如何在HttpClient工具类中添加多文件上传功能,包括引入HttpMime依赖,修改Utils的map2List方法以处理MultipartEntityBuilder,解决中文文件名乱码问题,以及在HttpConfig中封装上传参数。提供了测试类和完整代码的GitHub链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在Git上有人给我提Issue,说怎么上传文件,其实我一开始就想上这个功能,不过这半年比较忙,所以一直耽搁了。这次正好没什么任务了,赶紧完成这个功能。毕竟作为一款工具类,有基本的请求和下载功能,就差上传了,有点说不过去。好了,天不早了,咱干点正事吧。

       如果你只想了解怎么用HttpClient来上传文件,可以参考这篇文章:http://blog.csdn.net/fengyuzhengfan/article/details/39941851,里面写的很清楚了。这里我主要介绍工具类中的修改。

       首先,上传功能需要用到HttpMime这个,所以首先在pom中添加maven依赖(不会的自行百度)。

       其次,修改Utils中的map2List方法。阅读过源码的都知道,我所有的请求参数,都是通过map来封装的,原来都是返回list,上次升级以后,返回的都是HttpEntity对象(看来下次得修改一下方法名了map2HttpEntity尴尬),把所有的参数转化为HttpEntity对象。

	//装填参数
	HttpEntity entity = Utils.map2List(nvps, config.map(), config.inenc());
	//设置参数到请求对象中
	((HttpEntityEnclosingRequestBase)request).setEntity(entity);

       现在上传用到的是MultipartEntityBuilder,所以添加一个特定类型,进行特殊处理。

	public static final String ENTITY_MULTIPART="$ENTITY_MULTIPART$";
	private static final List<String> SPECIAL_ENTITIY = Arrays.asList(ENTITY_STRING, ENTITY_BYTES, ENTITY_FILE, ENTITY_INPUTSTREAM, ENTITY_SERIALIZABLE, ENTITY_MULTIPART);

	/**
	 * 参数转换,将map中的参数,转到参数列表中
	 * 
	 * @param nvps				参数列表
	 * @param map				参数列表(map)
	 * @throws UnsupportedEncodingException 
	 */
	public static HttpEntity map2List(List<NameValuePair> nvps, Map<String, Object> map, String encoding) throws UnsupportedEncodingException {
		HttpEntity entity = null;
		if(map!=null && map.size()>0){
			boolean isSpecial = false;
			// 拼接参数
			for (Entry<String, Object> entry : map.entrySet()) {
				if(SPECIAL_ENTITIY.contains(entry.getKey())){//判断是否在之中
					isSpecial = true;
					if(ENTITY_STRING.equals(entry.getKey())){//string
						entity = new StringEntity(String.valueOf(entry.getValue()), encoding);
						break;
					}else if(ENTITY_BYTES.equals(entry.getKey())){//file
						entity = new ByteArrayEntity((byte[])entry.getValue());
						break;
					}else if(ENTITY_FILE.equals(entry.getKey())){//file
					
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值