JavaWeb(SpringBoot3+vue3)开发+教学管理系统项目实战之本地附件储存文件上传
1). 生成的前端代码形式如下:
- <!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="username"><br>
- 年龄: <input type="text" name="age"><br>
- 头像: <input type="file" name="file"><br>
- <input type="submit" value="提交">
- </form>
-
- </body>
- </html>
复制代码 直接将里的 upload.html 文件,复制到springboot项目工程下的static目录里面。
http://localhost:8080/upload.html
2). 生成的服务端代码形式如下
- package com.zidiu.controller;
-
- import com.zidiu.pojo.Result;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.multipart.MultipartFile;
-
- import java.io.File;
- import java.util.UUID;
-
- @Slf4j
- @RestController
- public class UploadController {
- private static final String UPLOAD_DIR = "F:/images/";
- /**
- * 上传文件 - 参数名file
- */
- @PostMapping("/upload")
- public Result upload(String username, Integer age , @RequestParam("file") MultipartFile file) throws Exception {
- log.info("上传文件:{}, {}, {}", username, age, file);
- if(!file.isEmpty()){
- // 生成唯一文件名
- String originalFilename = file.getOriginalFilename();
- String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
- String uniqueFileName = UUID.randomUUID().toString().replace("-", "") + extName;
- // 拼接完整的文件路径
- File targetFile = new File(UPLOAD_DIR + uniqueFileName);
-
- // 如果目标目录不存在,则创建它
- if (!targetFile.getParentFile().exists()) {
- targetFile.getParentFile().mkdirs();
- }
- // 保存文件
- file.transferTo(targetFile);
- }
- return Result.success();
- }
- }
复制代码
Spring中提供了一个API:MultipartFile,使用这个API就可以来接收到上传的文件
问题1:如果表单项的名字和方法中形参名不一致,该怎么办?
- public Result upload(String username,
- Integer age,
- MultipartFile image) //image形参名和请求参数名file不一致
复制代码 解决:使用@RequestParam注解进行参数绑定
- public Result upload(String username,
- Integer age,
- @RequestParam("file") MultipartFile image)
复制代码 MultipartFile 常见方法:
- String getOriginalFilename(); //获取原始文件名
- void transferTo(File dest); //将接收的文件转存到磁盘文件中
- long getSize(); //获取文件的大小,单位:字节
- byte[] getBytes(); //获取文件内容的字节数组
- InputStream getInputStream(); //获取接收到的文件内容的输入流
那么如果需要上传大文件,可以在 application.xml 进行如下配置:
- spring:
- servlet:
- multipart:
- max-file-size: 10MB
- max-request-size: 100MB
复制代码 完整源代码下载:
demo.zip
(49.96 KB, 下载次数: 0, 售价: 50 金币)
SpringBoot3+Vue3开发综合实战项目:
JavaWeb(SpringBoot3+vue3)开发+教学管理系统项目实战
|