文件上传实现

该博客介绍了如何在Spring Boot应用中实现代理文件上传和下载功能。通过@RestController注解定义了UploadController,动态读取配置文件中的路径,使用MultipartFile处理文件上传,将文件重命名为唯一的UUID名并存储到服务器。同时,提供了下载方法,通过FileInputStream和ServletOutputStream读取并返回文件内容。
摘要由CSDN通过智能技术生成
/**
 * 文件上传介绍
 */
@RestController
@RequestMapping("/common")
@Slf4j
public class UploadController {

        // 动态读取配置文件中的路径
    @Value("${fileDir.name}")
    private String fileURLPath;

    //  上传
    @PostMapping("/upload")
    public R upload(MultipartFile file) throws IOException {
        //  file必须跟请求中的名称一样 . 是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件会删除
        //   System.out.println(file.getOriginalFilename());    //原始文件名
        // 给上传到服务器的文件重命名,并且名字必须唯一
        String uuidName = UUID.randomUUID().toString();  //  将UUID转化为String
        log.info("原始文件名为:{}", file.getOriginalFilename());
        String originalFilename = file.getOriginalFilename();  // 获得原文件名称
        String substring = originalFilename.substring(originalFilename.lastIndexOf("."));  // 获得文件的后缀  .jpg
        uuidName = uuidName + substring;
        //保存到服务器本地  也可以使用 输出流进行本地存储
        file.transferTo(new File(fileURLPath + uuidName));
//        FileOutputStream fos = new FileOutputStream(fileURLPath + uuidName);
//        fos.write(file.getBytes());
        return R.success(uuidName);
    }

    //  下载
    @Autowired
    private HttpServletResponse response;

    /**
     * 解决不能上传大文件的方案  在 application.yml 中配置
     * servlet:
     * multipart:
     * file-size-threshold:
     */
    @GetMapping("/download")
    public void download(String name) throws IOException {
        // 从浏览器本地读取到内存 返回到客户端
        FileInputStream is = new FileInputStream(fileURLPath + name);
        ServletOutputStream os = response.getOutputStream();
        byte[] bytes = new byte[1024];
        while (true) {
            int len = is.read(bytes);
            if (len == -1) {
                break;
            }
            os.write(bytes, 0, len);
        }
        os.close();
        is.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值