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();
}
}