All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.weicoder.httpclient.HttpUpload Maven / Gradle / Ivy

package com.weicoder.httpclient;

import java.io.File;
import java.util.List;
import java.util.Map;
 
import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.entity.UrlEncodedFormEntity;
import org.apache.hc.client5.http.entity.mime.HttpMultipartMode;
import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder;  
import org.apache.hc.core5.http.NameValuePair; 
import org.apache.hc.core5.http.message.BasicHeader;
import org.apache.hc.core5.http.message.BasicNameValuePair;

import com.weicoder.common.constants.HttpConstants;
import com.weicoder.common.constants.StringConstants;
import com.weicoder.common.io.IOUtil;
import com.weicoder.common.U;
import com.weicoder.common.W;
import com.weicoder.common.lang.Lists;
import com.weicoder.common.log.Log;
import com.weicoder.common.log.LogFactory;

/**
 * http 上传文件
 * 
 * @author WD
 */
public class HttpUpload {
	// 日志
	private final static Log LOG = LogFactory.getLog(HttpUpload.class);

	/**
	 * 上传文件
	 * 
	 * @param  url   post提交地址
	 * @param  files 上传文件
	 * @return       返回结果
	 */
	public static String upload(String url, File... files) {
		return upload(url, null, files);
	}

	/**
	 * 上传文件
	 * 
	 * @param  url   post提交地址
	 * @param  data  提交参数
	 * @param  files 上传文件
	 * @return       返回结果
	 */
	public static String upload(String url, Map data, File... files) {
		// 如果文件为空
		if (U.E.isEmpty(url) || U.E.isEmpty(files))
			return StringConstants.EMPTY;
		// 声明HttpPost
		HttpPost post = null;
		try {
			// 获得HttpPost
			post = new HttpPost(url);
//			post.addHeader(new BasicHeader(HttpConstants.CONTENT_TYPE_KEY, HttpConstants.CONTENT_TYPE_UPLOAD));
			// 参数
			if (U.E.isNotEmpty(data)) {
				// 声明参数列表
				List list = Lists.newList(data.size());
				// 设置参数
				data.forEach((k, v) -> list.add(new BasicNameValuePair(k, W.C.toString(v))));
				// 设置参数与 编码格式
				post.setEntity(new UrlEncodedFormEntity(list));
			}
			// 多提交实体构造器
			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
			// 设置浏览器上传
			builder.setMode(HttpMultipartMode.EXTENDED);
			// 添加上传文件
			for (File file : files)
				builder.addBinaryBody(file.getName(), file);
			// 设置提交文件参数
			post.setEntity(builder.build());
			// 返回结果
			return IOUtil.readString(HttpClient.CLIENT.execute(post).getEntity().getContent());
		} catch (Exception e) {
			LOG.error(e);
		} finally {
			// 销毁post
			if (post != null) {
				post.abort();
			}
		}
		return StringConstants.EMPTY;
	}

	/**
	 * 上传文件
	 * 
	 * @param  url  post提交地址
	 * @param  name 参数名
	 * @param  b    流
	 * @return      返回结果
	 */
	public static String upload(String url, String name, byte[] b) {
		return upload(url, null, name, b);
	}

	/**
	 * 上传文件
	 * 
	 * @param  url  post提交地址
	 * @param  data 提交参数
	 * @param  name 参数名
	 * @param  b    流
	 * @return      返回结果
	 */
	public static String upload(String url, Map data, String name, byte[] b) {
		// 如果文件为空
		if (U.E.isEmpty(url) || U.E.isEmpty(b))
			return StringConstants.EMPTY;
		// 声明HttpPost
		HttpPost post = null;
		try {
			// 获得HttpPost
			post = new HttpPost(url);
			post.addHeader(new BasicHeader(HttpConstants.CONTENT_TYPE_KEY, "multipart/form-data"));
			// 多提交实体构造器
			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
			// 设置浏览器上传
			builder.setMode(HttpMultipartMode.EXTENDED);
			// 添加上传文件
			builder.addBinaryBody(name, b);
			// 参数
			if (U.E.isNotEmpty(data))
				// 设置参数
				data.forEach((k, v) -> builder.addTextBody(k, W.C.toString(v)));
			// 设置提交文件参数
			post.setEntity(builder.build());
			// 返回结果
			return IOUtil.readString(HttpClient.CLIENT.execute(post).getEntity().getContent());
		} catch (Exception e) {
			LOG.error(e);
		} finally {
			// 销毁post
			if (post != null)
				post.abort();
		}
		return StringConstants.EMPTY;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy