JAVA-Web后端学习9 文件上传

妙にためいき热いって

文件上传

文件上传:将本地的文件例如图片、音频、视频等文件上传到服务器,供其他用户浏览和下载。

这是前端的上传文件的的HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>

    <form action="/upload" method="post" enctype="multipart/form-data">
        姓名: <input type="text" name="name"><br>
        年龄: <input type="text" name="age"><br>
        头像: <input type="file" name="file"><br>
        <input type="submit" value="提交">
    </form>

</body>
</html>

效果如下:
image
使用<form>创建交互表单时添加了三个属性

action="/upload 表示目标提交的指定地址是/upload
method="post" 表示使用 HTTP POST 方法提交数据
enctype="multipart/form-data" 表示设置表单数据编码类型为多部分格式,用于文件上传。如果移除的话,那么将无法上传文件格式的数据

接下来设置后端控制层代码然后执行,其中我们要设置后端控制层接收参数名和前端传递参数名一致,

@RestController
public class UploadController {

    @PostMapping("/upload")
    public ResultData uploadFile(String name, Integer age, MultipartFile file) {
        System.out.println("Now we Get : "+name+" , "+age+" , "+file);
        return ResultData.success();
    }
}

其中MultipartFileSupreme提供的类,用于接受前段传递的文件信息
执行结果如下:
image

其中我们打断点查看后端接受的前段信息如下:
image
临时文件打开后内容如下:
image
继续执行,临时文件夹内容被清空
image
由于我们是上传文件,所以我们必须要想办法保存文件

文件存储

存储文件的话控制层代码如下。使用file.getOriginalFilename()方法来获取文件名称,使用file.transferTo方法来存储文件:

@PostMapping("/upload")
public ResultData uploadFile(String name, Integer age, MultipartFile file) throws IOException {
    System.out.println("Now we Get : "+name+" , "+age+" , "+file);

    String originalFileName = file.getOriginalFilename();

    file.transferTo(new File("E:/UploadFile/"+originalFileName));

    return ResultData.success();
}

考虑到如果多人都存储同一个文件的话,需要将存储后的文件重新命名以防止文件名冲突,这里使用UUID.randomUUID()方法获得随机ID来命名存储后的文件:

@PostMapping("/upload")
public ResultData uploadFile(String name, Integer age, MultipartFile file) throws IOException {
    System.out.println("Now we Get : "+name+" , "+age+" , "+file);

    String originalFileName = file.getOriginalFilename();

    
    if (originalFileName != null) {
        //获取文件扩展名
        String extension = originalFileName.substring(originalFileName.lastIndexOf("."));
        //使用随机ID拼接扩展名来获取新文件名
        String newFileName = UUID.randomUUID() + extension;
        file.transferTo(new File("E:/UploadFile/"+newFileName));
    }

    return ResultData.success();
}

命名后的文件如下
image

同时上传文件需要在application.yml中添加如下配置信息:

spring:
  # 添加的文件配置信息如下
  servlet:
    multipart:
      # 最大单个文件大小
      max-file-size: 10MB
      # 最大请求大小(所有文件以及表单数据累计大小)
      max-request-size: 100MB

阿里云存储

阿里云对象存储OSS(Object Storage Service),是一款海量、安全、可靠、低成本的云存储服务。使用OSS,你可以通过网络随时存储和调用包括文本、图片、视频在内的各种文件。

PS:由于这个东西要收费的,所以我就不使用了,象征性的传个文件就当可以了

posted @ 2026-03-23 19:27  tcswuzb  阅读(2)  评论(0)    收藏  举报