Spring文件上传下载代码

Spring文件上传下载代码

文件上传

MultipartFile是SpringMVC提供简化上传操作的工具类。

java 复制代码
	/**
     * 文件上传接口
     *
     * @param file
     * @return
     */
    @PostMapping("/fileUpload")
    public String fileUpload(@RequestParam("file") MultipartFile file) {
        // 用户鉴权,判断有无权限上传,此处逻辑省略

        // 文件判空
        if (file.isEmpty()) {
            return "上传失败,文件为空";
        }
        List<String> suffixList = new ArrayList<String>() {{
            add("pdf");
            add("xls");
        }};
        // 获取文件后缀
        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
        // 校验文件后缀
        if (!suffixList.contains(suffix)) {
            return "文件类型不合法";
        }

        // 限制文件大小 5M , file.getSize()单位为字节
        if (file.getSize() > 5 * 1024 * 1024) {
            return "文件大小超出限制";
        }

        try {
            // 构建文件名
            // 获得当前项目所在文件夹
            String fileDir = System.getProperty("user.dir") + File.separator + "/file/";
            String fileName = "MyFile";
            // 首次上传需先创建文件夹
            File dir = new File(fileDir);
            if (!dir.exists()) {
                dir.mkdirs();
            }
            // 保存文件
            file.transferTo(new File(fileDir + fileDir + "." + suffix));

        } catch (Exception e) {
            return "文件上传失败";
        }
        return "文件上传成功";
    }

文件下载:

java 复制代码
	@GetMapping("fileDownLoad")
    public void fileDownLoad(HttpServletResponse response) {
        FileInputStream fileInputStream = null;
        try{
            String fileName = "Myfile.exe";
            String absolutePath = System.getProperty("user.dir") + File.separator + "/file/" + fileName;
            File file = new File(absolutePath);
            fileInputStream = new FileInputStream(file);
            // 设置response 头部
            response.reset();
            response.setContentType("application/load;charset=UTF-8");
             //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
            //attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"
            // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
            response.setHeader("Content-Disposition", "attachment;filename="
            + new String(file.getName().getBytes("utf-8"), "iso-8859-1"));
            // 将输入流数据写入到响应输出流中
            ServletOutputStream sos = response.getOutputStream();
            byte[] b = new byte[1024];
            int len;
            while((len = fileInputStream.read(b)) > 0) {
                sos.write(b, 0, len);
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            if(fileInputStream != null) {
                try{
                    fileInputStream.close();
                } catch (IOException e) {
                    System.out.println(e.getMessage());
                }
            }
        }
    }
相关推荐
androidwork7 分钟前
Android LinearLayout、FrameLayout、RelativeLayout、ConstraintLayout大混战
android·java·kotlin·androidx
忠于明白32 分钟前
Spring AI 核心工作流
人工智能·spring·大模型应用开发·spring ai·ai 应用商业化
陈小桔36 分钟前
限流算法java实现
java
黑客老李41 分钟前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
勤奋的知更鸟1 小时前
Java编程之原型模式
java·开发语言·原型模式
叶 落1 小时前
[Java 基础]数组
java·java 基础
KK溜了溜了1 小时前
JAVA-springboot log日志
java·spring boot·logback
珂朵莉MM1 小时前
2021 RoboCom 世界机器人开发者大赛-高职组(初赛)解题报告 | 珂学家
java·开发语言·人工智能·算法·职场和发展·机器人
香蕉炒肉2 小时前
Java优化:双重for循环
java·开发语言
黄雪超2 小时前
JVM——打开JVM后门的钥匙:反射机制
java·开发语言·jvm