mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
change multipart
This commit is contained in:
parent
a967dd6c79
commit
47be0f4f79
@ -24,7 +24,7 @@ public class MapWrapper<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, S
|
||||
/** 默认初始大小 */
|
||||
protected static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
|
||||
|
||||
private Map<K, V> raw;
|
||||
private final Map<K, V> raw;
|
||||
|
||||
/**
|
||||
* 构造
|
||||
|
@ -1,13 +1,14 @@
|
||||
package cn.hutool.core.net.multipart;
|
||||
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.map.multi.ListValueMap;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@ -20,14 +21,14 @@ import java.util.Set;
|
||||
public class MultipartFormData {
|
||||
|
||||
/** 请求参数 */
|
||||
private Map<String, String[]> requestParameters = new HashMap<>();
|
||||
private final ListValueMap<String, String> requestParameters = new ListValueMap<>();
|
||||
/** 请求文件 */
|
||||
private Map<String, UploadFile[]> requestFiles = new HashMap<>();
|
||||
private final ListValueMap<String, UploadFile> requestFiles = new ListValueMap<>();
|
||||
/** 上传选项 */
|
||||
private final UploadSetting setting;
|
||||
|
||||
/** 是否解析完毕 */
|
||||
private boolean loaded;
|
||||
/** 上传选项 */
|
||||
private UploadSetting setting;
|
||||
|
||||
// --------------------------------------------------------------------- Constructor start
|
||||
/**
|
||||
@ -104,12 +105,9 @@ public class MultipartFormData {
|
||||
* @return null未找到,否则返回值
|
||||
*/
|
||||
public String getParam(String paramName) {
|
||||
if (requestParameters == null) {
|
||||
return null;
|
||||
}
|
||||
String[] values = requestParameters.get(paramName);
|
||||
if (ArrayUtil.isNotEmpty(values)) {
|
||||
return values[0];
|
||||
final List<String> values = getListParam(paramName);
|
||||
if (CollUtil.isNotEmpty(values)) {
|
||||
return values.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -118,9 +116,6 @@ public class MultipartFormData {
|
||||
* @return 获得参数名集合
|
||||
*/
|
||||
public Set<String> getParamNames() {
|
||||
if (requestParameters == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
return requestParameters.keySet();
|
||||
}
|
||||
|
||||
@ -131,9 +126,21 @@ public class MultipartFormData {
|
||||
* @return 数组表单值
|
||||
*/
|
||||
public String[] getArrayParam(String paramName) {
|
||||
if (requestParameters == null) {
|
||||
return null;
|
||||
final List<String> listParam = getListParam(paramName);
|
||||
if(null != listParam){
|
||||
return listParam.toArray(new String[0]);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得集合表单值
|
||||
*
|
||||
* @param paramName 参数名
|
||||
* @return 数组表单值
|
||||
* @since 5.3.0
|
||||
*/
|
||||
public List<String> getListParam(String paramName) {
|
||||
return requestParameters.get(paramName);
|
||||
}
|
||||
|
||||
@ -143,7 +150,16 @@ public class MultipartFormData {
|
||||
* @return 所有属性的集合
|
||||
*/
|
||||
public Map<String, String[]> getParamMap() {
|
||||
return requestParameters;
|
||||
return Convert.toMap(String.class, String[].class, getParamListMap());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有属性的集合
|
||||
*
|
||||
* @return 所有属性的集合
|
||||
*/
|
||||
public ListValueMap<String, String> getParamListMap() {
|
||||
return this.requestParameters;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------- Files parameters
|
||||
@ -169,9 +185,22 @@ public class MultipartFormData {
|
||||
* @return 上传的文件列表
|
||||
*/
|
||||
public UploadFile[] getFiles(String paramName) {
|
||||
if (requestFiles == null) {
|
||||
return null;
|
||||
final List<UploadFile> fileList = getFileList(paramName);
|
||||
if(null != fileList){
|
||||
return fileList.toArray(new UploadFile[0]);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得某个属性名的所有文件<br>
|
||||
* 当表单中两个文件使用同一个name的时候
|
||||
*
|
||||
* @param paramName 属性名
|
||||
* @return 上传的文件列表
|
||||
* @since 5.3.0
|
||||
*/
|
||||
public List<UploadFile> getFileList(String paramName) {
|
||||
return requestFiles.get(paramName);
|
||||
}
|
||||
|
||||
@ -181,9 +210,6 @@ public class MultipartFormData {
|
||||
* @return 上传的文件属性名集合
|
||||
*/
|
||||
public Set<String> getFileParamNames() {
|
||||
if (requestFiles == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
return requestFiles.keySet();
|
||||
}
|
||||
|
||||
@ -193,6 +219,15 @@ public class MultipartFormData {
|
||||
* @return 文件映射
|
||||
*/
|
||||
public Map<String, UploadFile[]> getFileMap() {
|
||||
return Convert.toMap(String.class, UploadFile[].class, getFileListValueMap());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件映射
|
||||
*
|
||||
* @return 文件映射
|
||||
*/
|
||||
public ListValueMap<String, UploadFile> getFileListValueMap() {
|
||||
return this.requestFiles;
|
||||
}
|
||||
|
||||
@ -214,9 +249,7 @@ public class MultipartFormData {
|
||||
* @param uploadFile 文件
|
||||
*/
|
||||
private void putFile(String name, UploadFile uploadFile) {
|
||||
UploadFile[] fileUploads = requestFiles.get(name);
|
||||
fileUploads = fileUploads == null ? new UploadFile[] { uploadFile } : ArrayUtil.append(fileUploads, uploadFile);
|
||||
requestFiles.put(name, fileUploads);
|
||||
this.requestFiles.putValue(name, uploadFile);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -226,9 +259,7 @@ public class MultipartFormData {
|
||||
* @param value 参数值
|
||||
*/
|
||||
private void putParameter(String name, String value) {
|
||||
String[] params = requestParameters.get(name);
|
||||
params = params == null ? new String[] { value } : ArrayUtil.append(params, value);
|
||||
requestParameters.put(name, params);
|
||||
this.requestParameters.putValue(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -260,7 +260,7 @@ public class UploadFile {
|
||||
* @throws IOException IO异常
|
||||
*/
|
||||
private void assertValid() throws IOException {
|
||||
if (!isUploaded()) {
|
||||
if (false == isUploaded()) {
|
||||
throw new IOException(StrUtil.format("File [{}] upload fail", getFileName()));
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ public class HttpServerRequest extends HttpServerBase {
|
||||
|
||||
private Map<String, HttpCookie> cookieCache;
|
||||
private ListValueMap<String, String> paramsCache;
|
||||
private MultipartFormData multipartFormDataCache;
|
||||
private Charset charsetCache;
|
||||
private byte[] bodyCache;
|
||||
|
||||
@ -154,7 +155,7 @@ public class HttpServerRequest extends HttpServerBase {
|
||||
* @return Content-Type头信息
|
||||
*/
|
||||
public String getContentType() {
|
||||
return getHeader(Header.USER_AGENT);
|
||||
return getHeader(Header.CONTENT_TYPE);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -306,10 +307,15 @@ public class HttpServerRequest extends HttpServerBase {
|
||||
this.paramsCache.putAll(HttpUtil.decodeParams(query, charset));
|
||||
}
|
||||
|
||||
// 解析body中的参数
|
||||
final String body = getBody();
|
||||
if(StrUtil.isNotBlank(body)){
|
||||
this.paramsCache.putAll(HttpUtil.decodeParams(body, charset));
|
||||
// 解析multipart中的参数
|
||||
if(isMultipart()){
|
||||
this.paramsCache.putAll(getMultipart().getParamListMap());
|
||||
} else{
|
||||
// 解析body中的参数
|
||||
final String body = getBody();
|
||||
if(StrUtil.isNotBlank(body)){
|
||||
this.paramsCache.putAll(HttpUtil.decodeParams(body, charset));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -372,14 +378,17 @@ public class HttpServerRequest extends HttpServerBase {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得MultiPart表单内容,多用于获得上传的文件 在同一次请求中,此方法只能被执行一次!
|
||||
* 获得MultiPart表单内容,多用于获得上传的文件
|
||||
*
|
||||
* @return MultipartFormData
|
||||
* @throws IORuntimeException IO异常
|
||||
* @since 5.3.0
|
||||
*/
|
||||
public MultipartFormData getMultipart() throws IORuntimeException {
|
||||
return getMultipart(new UploadSetting());
|
||||
if(null == this.multipartFormDataCache){
|
||||
this.multipartFormDataCache = parseMultipart(new UploadSetting());
|
||||
}
|
||||
return this.multipartFormDataCache;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -392,7 +401,7 @@ public class HttpServerRequest extends HttpServerBase {
|
||||
* @throws IORuntimeException IO异常
|
||||
* @since 5.3.0
|
||||
*/
|
||||
public MultipartFormData getMultipart(UploadSetting uploadSetting) throws IORuntimeException {
|
||||
public MultipartFormData parseMultipart(UploadSetting uploadSetting) throws IORuntimeException {
|
||||
final MultipartFormData formData = new MultipartFormData(uploadSetting);
|
||||
try {
|
||||
formData.parseRequestStream(getBodyStream(), getCharset());
|
||||
|
Loading…
x
Reference in New Issue
Block a user