• 文件上传下载


    目录

    文件上传下载

    UUID转存文件

     文件上传

     文件下载


    文件上传下载

    文件上传介绍

    文件下载介绍  

            代码具体实现

    @RestController
    @Slf4j
    @RequestMapping("/common")
    public class CommonController {

        @GetMapping("/upload")
        public R upload(MultipartFile file) {

        }

    }
    file这里不能随便起名字的要跟浏览器里面的文件上传的name保持一致

     file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件就会被删除

    转存文件
     

    1. try {
    2. file.transferTo(new File("F:\\hello.jpg"));
    3. } catch (IOException e) {
    4. e.printStackTrace();
    5. }

       使用配置文件来规定路径

    配置文件加入
    wzx: 
      path: F:\
    调用位置

    @Value("${wzx.path}")
    private String basePath;
    转存文件

    try {
        file.transferTo(new File(basePath+"hello.jpg"));
    } catch (IOException e) {
        e.printStackTrace();
    }

      转存的时候使用原来文件的名字

    获取原文件的名字

    String originalFilename = file.getOriginalFilename();
    转存文件

    try {
        file.transferTo(new File(basePath+originalFilename));
    } catch (IOException e) {
        e.printStackTrace();
    }

    UUID转存文件

            不过一般都不建议使用上述的名字方法,相同的名字时会覆盖原来的文件,会丢失数据,采用uuid的方式命名会避免这种情况

    String originalFilename = file.getOriginalFilename();
            获取原文件名称
    String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            获取原文件名称的后缀从最后一个.开始的后缀
    String fileName = UUID.randomUUID().toString() + suffix;
            用uuid的随机id加上原文件的后缀

      当转存文件的时候路径中的文件夹本次不存在,自动创建文件夹

    1. //创建一个目录对象
    2. File dir = new File(basePath);
    3. //判断当前目录是否存在
    4. if(!dir.exists()){
    5. //目录不存在需要创建
    6. dir.mkdirs();
    7. }

     文件上传

    配置信息里面的文件路径

    wzx:
      path: F:\wzxw\

    前后都要有不然会导致新建问价但是文件转存的时候不会进入指定文件夹

    1. @RestController
    2. @Slf4j
    3. @RequestMapping("/common")
    4. public class CommonController {
    5. @Value("${wzx.path}")
    6. private String basePath;
    7. /**
    8. * 文件上传
    9. * @param file
    10. * @return
    11. */
    12. @PostMapping("/upload")
    13. public R<String> upload(MultipartFile file) {
    14. log.info(file.toString());
    15. String originalFilename = file.getOriginalFilename();
    16. String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
    17. String fileName = UUID.randomUUID().toString() + suffix;
    18. //创建一个目录对象
    19. File dir = new File(basePath);
    20. //判断当前目录是否存在
    21. if (!dir.exists()) {
    22. //目录不存在需要创建
    23. dir.mkdirs();
    24. }
    25. try {
    26. file.transferTo(new File(basePath + fileName));
    27. } catch (IOException e) {
    28. e.printStackTrace();
    29. }
    30. return R.success(fileName);
    31. }

     文件下载

     用来将上传的文件回显在浏览器上

    1. @Value("${wzx.path}")
    2. private String basePath;
    3. /**
    4. * 文件下载
    5. * @param name
    6. * @param response
    7. */
    8. @GetMapping("/download")
    9. public void download(String name, HttpServletResponse response) {
    10. try {
    11. //输入流,通过输入流读取文件内容
    12. FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));
    13. //输出流,通过输出流将文件写回浏览器,在浏览器展示图片
    14. ServletOutputStream outputStream = response.getOutputStream();
    15. response.setContentType("image/jpeg");
    16. int len = 0;
    17. byte[] bytes = new byte[1024];
    18. while ((len = fileInputStream.read(bytes)) != -1) {
    19. //写入bytes从0写到len len是文件的总长度
    20. outputStream.write(bytes, 0, len);
    21. //刷新输出流
    22. outputStream.flush();
    23. }
    24. //关闭资源
    25. outputStream.close();
    26. fileInputStream.close();
    27. } catch (Exception e) {
    28. e.printStackTrace();
    29. }
    30. }

     

  • 相关阅读:
    Java 中奖
    python系列26:numpy稀疏矩阵笔记
    互联网摸鱼日报(2023-10-13)
    SGI STL 二级空间配置源码刨析
    我国平台经济领域“二选一”现象的成因、影响及对策
    【零基础学Python】Day6 Python基本数据类型之Tuple
    财务指标初步学习笔记
    自然语言处理2(文本的表示)
    三个线程交替打印的几种实现方式
    李宏毅机器学习笔记4-梯度下降
  • 原文地址:https://blog.csdn.net/qq_59102081/article/details/126374430