Spring文件上传下载代码

Spring文件上传下载代码

文件上传

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

	/**
     * 文件上传接口
     *
     * @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 "文件上传成功";
    }

文件下载:

	@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());
                }
            }
        }
    }

相关推荐

  1. Spring文件下载代码

    2024-03-11 01:50:03       42 阅读
  2. Spring-MVC-文件下载

    2024-03-11 01:50:03       64 阅读
  3. Spring MVC 文件下载

    2024-03-11 01:50:03       41 阅读
  4. 文件下载

    2024-03-11 01:50:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-11 01:50:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-11 01:50:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-11 01:50:03       82 阅读
  4. Python语言-面向对象

    2024-03-11 01:50:03       91 阅读

热门阅读

  1. C++ QT 嘴试题--集锦

    2024-03-11 01:50:03       33 阅读
  2. 使用route的reject拒绝境外ip通信

    2024-03-11 01:50:03       41 阅读
  3. Linux 内核中处理阻塞访问的方法:等待队列

    2024-03-11 01:50:03       47 阅读
  4. 自定义组件v-model传值方法

    2024-03-11 01:50:03       44 阅读
  5. Android下使用OpenOCD

    2024-03-11 01:50:03       37 阅读
  6. AJAX-查询参数

    2024-03-11 01:50:03       35 阅读
  7. springboot集成 mongodb以及mongodb简单工具类

    2024-03-11 01:50:03       33 阅读