文件上传是web开发非常重要
在数字时代,文件上传已成为我们日常生活中不可或缺的一部分。无论是工作中的文档分享、学习中的资料交流,还是娱乐中的视频、图片分享,文件上传都为我们提供了便捷、高效的数据交换方式。然而,文件上传不仅仅是简单的数据传输,它背后蕴含着技术、安全、用户体验等多方面的考量。
Spring Boot 中使用 MultipartFile 实现文件上传
在Spring Boot应用中,处理文件上传通常涉及到使用MultipartFile
接口。MultipartFile
是Spring框架提供的一个接口,用于处理表单中的multipart/form-data编码类型的数据,特别是文件上传。下面是一个简单的例子,展示如何在Spring Boot控制器中使用MultipartFile
接口实现文件上传功能,并将文件保存在本地磁盘上。
1.创建uploadcontroller类
@RestController
public class UploadController {
@PostMapping("/update")
public String update(@RequestParam("file") MultipartFile file) {
//判断 是否为空
if (file.isEmpty()) {
return "error";
}
//获取图片文件名称
String originalFilename = file.getOriginalFilename();
String extention = originalFilename.substring(originalFilename.lastIndexOf("."));
int lastDotIndex = originalFilename.lastIndexOf(".");
if (lastDotIndex != -1) {
extention = originalFilename.substring(lastDotIndex);
}
// 检查文件后缀是否为图片格式
String[] imageExtensions = {".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".webp"}; // 可以根据需要添加更多
boolean isImage = false;
for (String extension : imageExtensions) {
if (extention.equalsIgnoreCase(extension)) {
isImage = true;
break;
}
}
// 如果不是图片格式,则抛出异常
if (!isImage) {
return "上传的文件不是图片格式";
}
String string = UUID.randomUUID().toString();// uuid
String newFileName = string + extention;
ApplicationHome applicationHome = new ApplicationHome(this.getClass()); //获取当class target/classes
String absoluteFile = applicationHome.getDir().getParentFile().getParentFile().getAbsoluteFile()+"\\src\\main\\resources\\image\\";
String path =absoluteFile+newFileName;
try {
file.transferTo(new File(path));
} catch (IOException e) {
return "err";
}
return path;
}
}
在上面的代码中,我们定义了一个POST请求的/upload
,它接受一个名为file
的MultipartFile
参数。然后,我们检查文件是否为空,如果不为空,则将其保存到指定的上传文件夹中。如果文件夹不存在,我们尝试创建它。
在文件中我们上传的是idea src下的文件目录 使用ApplicationHome 获取 ,并进行拼接 获取resourcses 目录下的image
2.upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> //updata 需要跟controller 的postmapping 一致
<form action="/update" method="post" enctype="multipart/form-data">
<input type="file" name="file" value="上传图片">
<input type="submit" value="上传">
</form>
</body>
</html>