文件上传和下载

博客介绍了在Java Spring Boot中实现文件上传和下载的方法。可在公共包创建控制类,在配置文件自定义存储路径并用@Value获取。上传时通过MultipartFile处理文件,重新命名并转存;下载可用IOUtils.copy或自定义方法。还能自定义MultipartFile接收图片的大小限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有在公共包中创建文件上传和下载的控制类

可以在配置文件中自定义文件的存储路径,后可以在类中用@Value来获取值

reggie:
  path: D:\img\

在类中可以在方法中传入MultipartFile类型的参数,并且形参的名字要和前端传过来的参数名一样

  • 首先通过MultipartFile类中的getOriginalFilename()获取文件的原始文件名,获取后缀
  • 通过UUID重新声明文件名并覆盖
  • 通过@Value获取配置文件中的存储路径的值
  • 将前端传过来的文件用MultipartFile的transferTo()方法转存到获取的路径中,并进行路径是否存在的判断
@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {
    @Value("${reggie.path}")
    private String basePath;
    /**
     * 文件上传
     * @param file
     * @return
     */
    @PostMapping("/upload")
    public R<String> upload(MultipartFile file){
        //file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件会删除
        log.info(file.toString());
		
        //原始文件名
        String originalFilename = file.getOriginalFilename();//abc.jpg
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));

        //使用UUID重新生成文件名,防止文件名称重复造成文件覆盖
        String fileName = UUID.randomUUID().toString() + suffix;//dfsdfdfd.jpg
		
        //创建一个目录对象
        File dir = new File(basePath);
        //判断当前目录是否存在
        if(!dir.exists()){
            //目录不存在,需要创建
            dir.mkdirs();
        }
		
        try {
            //将临时文件转存到指定位置
            file.transferTo(new File(basePath + fileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return R.success(fileName);
    }
}    

下载文件

        可以使用IOUtils.copy()来进行直接的获取输出操作

        也可以自己写

@GetMapping("/download")
public void download(String name, HttpServletResponse response){
    try {
        //输入流,通过输入流读取文件内容
        FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));

        //输出流,通过输出流将文件写回浏览器
        ServletOutputStream outputStream = response.getOutputStream();

        response.setContentType("image/jpeg");

        int len = 0;
        byte[] bytes = new byte[1024];
        while ((len = fileInputStream.read(bytes)) != -1){
            outputStream.write(bytes,0,len);
            outputStream.flush();
        }

        //关闭资源
        outputStream.close();
        fileInputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

但是MultipartFile默认接收的图片会有一定的大小限制,用这个方法可以自定义大小

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //指定文件代销
        factory.setMaxFileSize(DataSize.ofBytes(10485760*1024));
        /// 设定上传文件大小
        factory.setMaxRequestSize(DataSize.ofBytes(10485760*1024));
        return factory.createMultipartConfig();
    }

//或者在配置文件中设置

# 设置上传文件的大小
spring:
  servlet:
    multipart:
      enabled: true
      max-file-size: 931775308
      max-request-size: 1000MB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值