0
点赞
收藏
分享

微信扫一扫

为Windows Terminal 配置zsh + Oh-My-Zsh!

飞空之羽 2024-11-03 阅读 9
java

获取不到request的值

先从request(普通表单)中取值,如果取不到,则从MultipartFormData( 文件上传) 解析取值。

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class ToolAction {

    /**
     * 将参数字符串转换为Map<paramKey,paramValue> eg.
     * xxKey=xxValue&yyKey=yyValue&zzKey=zzValue -->
     * Map{xxKey=xxValue,yyKey=yyValue,zzKey=zzValue}
     *
     * @param request
     * @throws UnsupportedEncodingException
     * @throws FileUploadException
     */
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static Map<String, String> getParameters(HttpServletRequest request) throws UnsupportedEncodingException {
        // 参数Map
        Map<String, String[]> properties = request.getParameterMap();
        // 返回值Map
        Map<String, String> returnMap = new HashMap<String, String>();
        Iterator<?> entries = properties.entrySet().iterator();
        Map.Entry entry;
        String name = "";
        String value = null;
        while (entries.hasNext()) {
            entry = (Map.Entry) entries.next();
            name = (String) entry.getKey();
            Object valueObj = entry.getValue();
            if (null == valueObj) {

            } else if (valueObj instanceof String[]) {
                String[] values = (String[]) valueObj;
                for (int i = 0; i < values.length; i++) {
                    value = values[i] + ",";
                }
                value = value.substring(0, value.length() - 1);
            } else {
                value = valueObj.toString().trim();
            }
            returnMap.put(name, value);
        }

        return returnMap;
    }

    /**
     * 将参数字符串转换为Map<paramKey,paramValue> eg.
     * xxKey=xxValue&yyKey=yyValue&zzKey=zzValue -->
     * Map{xxKey=xxValue,yyKey=yyValue,zzKey=zzValue}
     * <p>
     * (处理multipart/form-data类型的表单请求)
     *
     * @param request
     * @throws UnsupportedEncodingException
     * @throws FileUploadException
     */
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static Map<String, String> getParametersForMultipartFormData(HttpServletRequest request)
            throws UnsupportedEncodingException, FileUploadException {
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
        if (multipartResolver.isMultipart(request)) {
            request.setCharacterEncoding("utf-8");
            Map<String, String> returnMap = new HashMap<String, String>();
            // 返回值Map
            // 文件上传的三部曲
            // 创建工厂
            DiskFileItemFactory factoy = new DiskFileItemFactory();
            // 创建解析器
            ServletFileUpload sfu = new ServletFileUpload(factoy);
            // 设置上传文件的大小
//            sfu.setFileSizeMax(20 * 1024);
            // 解析request
            List<FileItem> list = sfu.parseRequest(request);

            // 只处理非文件内容
            for (FileItem fi : list) {
                if (fi.isFormField()) {//只要普通字段,不要文件
                    returnMap.put(fi.getFieldName(), fi.getString("UTF-8"));
                }
            }
            return returnMap;
        }
        return null;
    }

    /**
     * 获取参数
     *
     * @param request
     * @return
     * @throws UnsupportedEncodingException
     * @throws FileUploadException
     */
    public static Map<String, String> getParams(HttpServletRequest request) throws UnsupportedEncodingException, FileUploadException {
        Map<String, String> params = getParameters(request);
        if (params.size() > 0) {
            return params;
        }
        return getParametersForMultipartFormData(request);
    }

    /**
     * 获取文件
     *
     * @param request
     * @param paramName
     * @return
     * @throws UnsupportedEncodingException
     */
    public MultipartFile getFileFromRequest(HttpServletRequest request, String paramName) throws UnsupportedEncodingException {
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
        if (multipartResolver.isMultipart(request)) {
            request.setCharacterEncoding("utf-8");
            List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles(paramName);
            return files.size() > 0 ? files.get(0) : null;
        }
        return null;
    }

}

问题

获取中文乱码

if (fi.isFormField()) {//只要普通字段,不要文件
	returnMap.put(fi.getFieldName(), fi.getString(“UTF-8));
}
举报

相关推荐

0 条评论