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

 

posted @ 2018-11-12 10:28  楼兰胡杨  阅读(684)  评论(0编辑  收藏  举报