使用SpringBoot进行的文件上传、下载

概述

大一点的公司中数据会有专门服务器保存,只需要按照给定的地址,将文件写入到相应的地址中即可,而对于下载,则从服务器中获取数据返回浏览器

文件上传

单文件上传

文件上传,重要的是知道上传文件的路径是哪、再有一个是文件名不用重复、然后是截取一下文件后缀名。文件名不重复可以通过new Date().getTime()得到,文件后缀名是最后一个点(.)及后面的英文组成,比如(123.jpg),通过MultipartFile 的getOriginalFilename返回的是一个字符串类型的文件名,字符串中可以通过lastIndexOf返回字符出现的位置及其后面字符串,这样就可以获得后缀名了,拼接一下,路径和文件名就有了,用transferTo输出就可以了

//上传图片
    @RequestMapping("/uploadPic")
    public void uploadPic(@RequestParam("picName") MultipartFile picName) throws IOException {

        /*URL resource = ChatstatisController.class.getResource("/resources/pictures");

        resource.*/

        String path = "D:/";

        //路径+名字
        String originalFilename = picName.getOriginalFilename();
        int i = originalFilename.lastIndexOf(".");
        String newName = new Date().getTime()+originalFilename.substring(i);

        File dest = new File(path,newName);

        picName.transferTo(dest);

        System.out.println(path);

    }

多文件上传

//多图片上传
    @RequestMapping("/uploadPicList")
    public void uploadPicList(MultipartFile[] files) throws IOException {

        String path = "D:/";

        for(MultipartFile file :files){


            //路径+名字
            String originalFilename = file.getOriginalFilename();
            int i = originalFilename.lastIndexOf(".");
            String newName = new Date().getTime()+originalFilename.substring(i);

            File dest = new File(path,newName);

            file.transferTo(dest);

        }



    }

多文件上传和单文件上传思路大体都差不多,在单文件上传的基础上加一个for循环就可以了,那么使用postman如何测试呐?想到的是既然MultipartFile[]是一个数组,那么只要根据文件名files相同,应该就可以直接注到MultipartFile[]中了

来测一下

在这里插入图片描述

ok,说明当入参是一个数组时,只要参数名相同,springboot在接收参数时都会注入到相应的数组中
在这里插入图片描述
完成

文件下载

对于下载来说,一般是遍历下载目录的列表,用户点击下载时,传文件名给后端,后端,根据路径获取文件然后将文件返回

//文件下载
    @RequestMapping("downloadPic")
    public void downloadPic(HttpServletRequest request,HttpServletResponse response,String fileName){

        //
        response.setCharacterEncoding(request.getCharacterEncoding());
        response.setContentType("application/octet-stream");
        FileInputStream fis = null;
        try {
            File file = new File("D:/candelete/"+fileName);
            fis = new FileInputStream(file);
            response.setHeader("Content-Disposition", "attachment; filename="+file.getName());
            IOUtils.copy(fis,response.getOutputStream());
            response.flushBuffer();

        } catch (Exception e) {
            e.printStackTrace();
        }


    }

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值