使用 httpclient 上传文件方法的封装

孤者浪人 提交于 2019-11-30 17:57:40

本人使用 httpclient 进行接口测试的过程中,遇到了上传文件的接口,之前的文章已经完成了二进制流上传图片的代码,但是还没有封装成固定的使用方法,今天分享一下封装后的方法,供大家参考。

/**
	 * 设置二进制流实体,params 里面参数值为 file
	 * 
	 * @param httpPost
	 *            httpPsot 请求
	 * @param params
	 *            请求参数
	 * @param file
	 *            文件
	 */
	public void setMultipartEntityEntity(HttpPost httpPost, JSONObject params, File file) {
		String fileName = getFileName(file);
		InputStream inputStream = null;
		try {
			inputStream = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		Iterator<String> keys = params.keys();// 遍历 params 参数和值
		MultipartEntityBuilder builder = MultipartEntityBuilder.create();// 新建builder对象
		while (keys.hasNext()) {
			String key = keys.next();
			String value = params.getString(key);
			if (value.equals("file")) {
				builder.addBinaryBody(key, inputStream, ContentType.create("multipart/form-data"), fileName);// 设置流参数
			} else {
				StringBody body = new StringBody(value, ContentType.create("text/plain", Consts.UTF_8));// 设置普通参数
				builder.addPart(key, body);
			}
		}
		HttpEntity entity = builder.build();// 生成entity
		httpPost.setEntity(entity);// 设置 entity
	}

此方法仅针对 Linux 系统,因为 Windows 系统在文件路径中用的“\”,在代码里是“\”所以 Windows 系统的朋友得注意力。

技术类文章精选

非技术文章精选

大咖风采

点击查看公众号地图

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!