zoukankan      html  css  js  c++  java
  • Java 处理 multipart/mixed 请求

    一、multipart/mixed 请求

      multipart/mixed 和 multipart/form-date 都是多文件上传的格式。区别在于:multipart/form-data 是一种特殊的表单上传,其中普通字段的内容还是按照一般的请求体构建,文件字段的内容按照 multipart 请求体构建,后端在处理 multipart/form-data 请求的时候,会在服务器上建立临时的文件夹存放文件内容,可参看这篇文章;而 multipart/mixed 请求会将每个字段的内容,不管是普通字段还是文件字段,都变成 Stream 流的方式去上传,因此后端在处理 multipart/mixed 的内容时,必须从 Stream 流中读取。

    二、HttpServletRequest 处理 multipart/mixed 请求

        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                Part signPart = request.getPart(Constants.SIGN_KEY);
                Part appidPart = request.getPart(Constants.APPID_KEY);
                Part noncestrPart = request.getPart(Constants.NONCESTR_KEY);
                Map<String, String[]> paramMap = new HashMap<>(8);
                paramMap.put(signPart.getName(), new String[]{stream2Str(signPart.getInputStream())});
                paramMap.put(appidPart.getName(), new String[]{stream2Str(appidPart.getInputStream())});
                paramMap.put(noncestrPart.getName(), new String[]{stream2Str(noncestrPart.getInputStream())});
                // 其他处理
          }
    
        private String stream2Str(InputStream inputStream) {
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"))) {
                String line;
                StringBuilder builder = new StringBuilder();
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
                return builder.toString();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "";
        }
    

    三、SpringMVC 处理 multipart/mixed 请求

    SpringMVC 可以直接以 @RequestPart 注解接收 multipart/mixed 格式的请求参数。

        @ResponseBody
        @RequestMapping(value = {"/token/user/uploadImage"}, method = {RequestMethod.POST, RequestMethod.GET})
        public AjaxList uploadImage(
                 @RequestPart (required = false) String token,
                 @RequestPart (required = false) String sign,
                 @RequestPart (required = false) String appid,
                 @RequestPart (required = false) String noncestr,
                 @RequestPart MultipartFile file, HttpServletRequest request) {
    
                 }
    
  • 相关阅读:
    Sqlserver 迁移数据库批量迁移作业(Job)
    在VS2010开发的MVC3 应用程序中设定默认的浏览器
    创建继承自System.Web.UI.WebControls.WebControl基类的控件类
    遍历页面控件
    @fontface
    加密配置节点
    视图状态的程序分块
    BlogEngine.NET 1.5的BlogProvider、DbBlogProvider
    避免target特性
    SCOPE_IDENTITY、IDENT_CURRENT 、@@IDENTITY
  • 原文地址:https://www.cnblogs.com/jmcui/p/10745275.html
Copyright © 2011-2022 走看看