zoukankan      html  css  js  c++  java
  • SpringBoot 文件上传实践

    背景:将上传的文件,如图片,写入指定服务器路径,保存起来。多文件上传时,由于HttpServletRequest不能直接取出文件数据,所以将其强制转换为MultipartHttpServletRequest。本文使用Postman模拟表单提交。

    1 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    2 Map<String,MultipartFile> files = multipartRequest.getFileMap();

    后台实现:

    /**
         * @Title uploadFiles
         * @Description 测试多文件上传
         * @date 2018-11-10 10:15
         */
        @PostMapping("/uploadFiles")
        public Map<String, Object> uploadFiles(HttpServletRequest req) {
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) req;
            // 无须知道上传时文件对应的key,遍历处理
            Map<String, MultipartFile> files = multipartRequest.getFileMap();
            String otherParam = req.getParameter("otherParam");
            Map<String, Object> data = new HashMap<>();
            for (MultipartFile value : files.values()) {
                data = uploadFile(value);
                int code = (int) data.get("code");
                if (200 != code) {
                    return data;
                }
            }
            data.put("code", 200);
            data.put("result", otherParam);
            return data;
        }
    
        /**
         * @Title uploadFile
         * @Description 逐个上传
         * @date 2018-11-10 10:17
         */
        private Map<String, Object> uploadFile(MultipartFile file) {
            Map<String, Object> result = new HashMap<>();
            // 判断文件是否为空
            if (file.isEmpty()) {
                result.put("code", -1);
                return result;
            }
            String fileName = file.getOriginalFilename();
            // 原文件名前加时间戳和随机数,避免覆盖文件
            String path = "D:/temp/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
            path = path + ((int) Math.random() * 999) + "_" + fileName;
            File dest = new File(path);
            if (dest.exists()) {
                result.put("code", -2);
                return result;
            }
            // 判断文件父目录是否存在
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdir();
            }
            try {
                file.transferTo(dest); // 保存文件
            } catch (IOException e) {
                result.put("code", -3);
                return result;
            }
            result.put("code", 200);
            return result;
        }

    Postman模拟提交时,配置如图:

    环境:springBootVersion 版本 '1.5.3.RELEASE'。

    参考文献:https://www.cnblogs.com/chevin/p/9260842.html

  • 相关阅读:
    Java实现 LeetCode 92 反转链表 II
    Java实现 LeetCode 92 反转链表 II
    Java实现 LeetCode 91 解码方法
    Java实现 LeetCode 91 解码方法
    Java实现 LeetCode 91 解码方法
    CDialogBar(对话条)和CReBar(伸缩条)的编程
    WinSock
    WinSock
    静态文本显示图标图片
    拆分窗口
  • 原文地址:https://www.cnblogs.com/east7/p/9945057.html
Copyright © 2011-2022 走看看