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());
                }
            }
        }
    }
相关推荐
陈王卜3 分钟前
django+boostrap实现发布博客权限控制
java·前端·django
小码的头发丝、3 分钟前
Spring Boot 注解
java·spring boot
午觉千万别睡过6 分钟前
RuoYI分页不准确问题解决
spring boot
java亮小白19978 分钟前
Spring循环依赖如何解决的?
java·后端·spring
飞滕人生TYF15 分钟前
java Queue 详解
java·队列
2301_8112743125 分钟前
大数据基于Spring Boot的化妆品推荐系统的设计与实现
大数据·spring boot·后端
武子康36 分钟前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结
java·大数据·数据仓库·hive·hadoop·sql·hdfs
武子康38 分钟前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
苏-言1 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
界面开发小八哥1 小时前
更高效的Java 23开发,IntelliJ IDEA助力全面升级
java·开发语言·ide·intellij-idea·开发工具