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

com.yuweix.kuafu.http.request.HttpFileRequest Maven / Gradle / Ivy

The newest version!
package com.yuweix.kuafu.http.request;


import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.yuweix.kuafu.http.HttpMethod;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import com.yuweix.kuafu.http.HttpConstant;
import com.yuweix.kuafu.http.response.HttpResponse;


/**
 * 上传文件
 * @author yuwei
 */
public class HttpFileRequest extends AbstractHttpRequest {
	private List fileFieldList;
	private List formFieldList;


	private HttpFileRequest() {
		super();
		fileFieldList = new ArrayList<>();
		formFieldList = new ArrayList<>();
		method(HttpMethod.POST);
	}
	public static HttpFileRequest create() {
		return new HttpFileRequest();
	}


	public HttpFileRequest addFile(String fieldName, byte[] content, String fileName) {
		FileWrapper fw = new FileWrapper();
		fw.setContent(content);
		fw.setFileName(fileName);

		for (FileField ff: fileFieldList) {
			if (fieldName.equals(ff.getFieldName())) {
				ff.addFile(fw);
				return this;
			}
		}

		FileField ff = new FileField();
		ff.setFieldName(fieldName);
		ff.addFile(fw);
		fileFieldList.add(ff);
		return this;
	}

	public HttpFileRequest formFieldList(Map map) {
		if (map == null || map.isEmpty()) {
			return this;
		}

		List formFieldList = new ArrayList<>();
		for (Map.Entry entry: map.entrySet()) {
			String key = entry.getKey();
			Object value = entry.getValue();
			if (key == null || value == null) {
				continue;
			}
			formFieldList.add(new FormField(key, value));
		}
		return formFieldList(formFieldList);
	}
	public HttpFileRequest formFieldList(List formFieldList) {
		this.formFieldList.clear();
		this.formFieldList.addAll(formFieldList);
		return this;
	}
	public HttpFileRequest addFormField(String key, String value) {
		if (key == null || "".equals(key) || value == null || "".equals(value)) {
			return this;
		}

		formFieldList.add(new FormField(key, value));
		return this;
	}

	@Override
	public HttpResponse execute() {
		String charset = getCharset();
		charset = charset != null ? charset : HttpConstant.ENCODING_UTF_8;
		
		ContentType textContentType = ContentType.create(ContentType.TEXT_PLAIN.getMimeType(), charset);
		ContentType multipartContentType = ContentType.create(ContentType.MULTIPART_FORM_DATA.getMimeType(), charset);

		MultipartEntityBuilder builder = MultipartEntityBuilder.create()
															.setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
															.setCharset(Charset.forName(charset));
		if (fileFieldList != null && fileFieldList.size() > 0) {
			for (FileField fileField: fileFieldList) {
				List fileList = fileField.getFileList();
				if (fileList != null && fileList.size()> 0) {
					for (FileWrapper fw: fileList) {
						builder.addBinaryBody(fileField.getFieldName(), fw.getContent(), multipartContentType, fw.getFileName());
					}
				}
			}
		}

		if (formFieldList != null && formFieldList.size() > 0) {
			for (FormField ff: formFieldList) {
				String k = ff.getKey();
				String v = ff.getValue();
				if (k == null || "".equals(k) || v == null || "".equals(v)) {
					continue;
				}
				builder.addTextBody(k, v, textContentType);
			}
		}
		HttpEntity entity = builder.build();

		HttpEntityEnclosingRequestBase requestBase = getRequestBase();
		requestBase.addHeader("Content-Disposition", "attachment");
		requestBase.setEntity(entity);
		this.setHttpUriRequest(requestBase);
		return execute0();
	}
}