Spring boot实现文件上传和文件下载(根据地址)

1.导入相关pom以及配置文件路径

		<!--hutool-->
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>5.7.20</version>
		</dependency>
        <!--文件上传-->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>4.1.2</version>
		</dependency>

 

 

用@Value来给需要的各种路径参数注入值

@Value("${file.path}")

private String filepath;

@Value("${server.ip}")

private String serverIp;

2.文件上传

解释说明:文件系统数据库设置MD5这个字段,MD5可以用来校验文件是否重复,重复就不上传,避免资源的浪费。同时在存储文件的同时还应该将文件各种类型参数写入数据库保存记录。

@PostMapping("/upload")
    public String upload(@RequestParam MultipartFile file) throws IOException {
        String url="";
        //获取文件名
        String originalFilename = file.getOriginalFilename();
        //获取文件大小
        long size = file.getSize();
        //类型
        String type = FileUtil.extName(originalFilename);
        //创建父级目录
        File uploadParentFile=new File(filepath);
        if (!(uploadParentFile.exists())){
             uploadParentFile.mkdir();
        }
        //防止重名 定义文件标识码
        String uuid= IdUtil.simpleUUID();
        File uploadFile=new File(filepath+"/"+uuid+'.'+type);
        //获取文件MD5 校验是否重复文件
        String md5= SecureUtil.md5(file.getInputStream());
        //根据MD5去数据库校验是否存在
        SysFile serviceMd5 = fileService.findMd5(md5);
        //判断文件是否存在
        if (serviceMd5==null){
            //把获取file存入系统磁盘
           file.transferTo(uploadFile);
           url= "http://"+serverIp+":8081/file/"+uuid+'.'+type;
           SysFile saveFile=new SysFile();
           saveFile.setName(originalFilename);
           saveFile.setType(type);
           saveFile.setSize(size/1024);
           saveFile.setUrl(url);
           saveFile.setMd5(md5);
           fileService.saveFile(saveFile);
       }
        else {
            QueryWrapper<SysFile> queryWrapper=new QueryWrapper<>();
            queryWrapper.eq("md5", md5);
            SysFile one = fileService.getOne(queryWrapper);
            url=one.getUrl();
        }

       return url;
    }

3.文件下载 根据UUID.文件类型 下载

    //根据uuid下载文件
    @GetMapping("/{fileUUID}")
    public void downFile(@PathVariable String fileUUID, HttpServletResponse response) throws IOException {
       //根据文件
       File uploadFile=new File(filepath+"/"+fileUUID);
       ServletOutputStream os=response.getOutputStream();
       response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(fileUUID,"UTF-8"));
       response.setContentType("application/octet-stream");
       //读取文件字节流
       os.write(FileUtil.readBytes(uploadFile));
       os.flush();
       os.close();
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值