springboot文件上传与下载
文件上传
在springboot中默认使用MultipartResolver 的实现类StandardServletMultipartResolver 所以,如果要使用CommonsMultipartResolver则注入就好
@Bean
public MultipartResolver multipartResolver() {
// 默认配不配都行,如果使用CommonsMultipartResolver,注入就行
// StandardServletMultipartResolver resolver = new StandardServletMultipartResolver();
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
resolver.setMaxInMemorySize(900 * 1024); // 900KB
resolver.setMaxUploadSize(100 * 1024 * 1024);// 上传文件大小 100M
return resolver;
}
且只需要导入web包即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type='submit'>上传</button>
</form>
</body>
</html>
后端代码(上传一个文件)
@Controller
public class FileController {
@PostMapping("/upload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return "文件不能为可空!";
}
// 使用日期来分类管理上传的文件
String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
File folder = new File("D:/E/upload/" + format);
if (!folder.exists()) {
folder.mkdirs();
}
String oldName = file.getOriginalFilename();
String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
File newFile = new File(folder, newName);
try {
//保存文件,返回文件路径
file.transferTo(newFile);
return folder + newName;
} catch (IOException ioException) {
ioException.printStackTrace();
}
return "error";
}
}
后端代码(上传多2个或者多个)
@PostMapping("/uploads2")
@ResponseBody
public String uploads2(MultipartFile file1, MultipartFile file2) {
// 使用日期来分类管理上传的文件
String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
File folder = new File("D:/E/upload/" + format);
if (!folder.exists()) {
folder.mkdirs();
}
try {
String oldName = file1.getOriginalFilename();
String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
File newFile = new File(folder, newName);
//保存文件
file1.transferTo(newFile);
oldName = file2.getOriginalFilename();
newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
newFile = new File(folder, newName);
//保存文件
file2.transferTo(newFile);
return "success";
} catch (IOException ioException) {
ioException.printStackTrace();
}
return "error";
}
@PostMapping("/uploads")
@ResponseBody
public String uploads(MultipartFile[] files) {
// 使用日期来分类管理上传的文件
String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
File folder = new File("D:/E/upload/" + format);
if (!folder.exists()) {
folder.mkdirs();
}
try {
for (MultipartFile file : files) {
if (file.isEmpty()) {
System.out.println("文件不能为可空!");
continue;
}
String oldName = file.getOriginalFilename();
String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
File newFile = new File(folder, newName);
//保存文件
file.transferTo(newFile);
}
return "success";
} catch (IOException ioException) {
ioException.printStackTrace();
}
return "error";
}
文件下载
- 后端代码
@GetMapping("/download")
@ResponseBody
public ResponseEntity<byte[]> download() throws Exception {
//下载文件,简单new个文件
String downloadFilePath = "D:/E/upload/2020-10-20/8d053ae3-5fcb-4a7a-ab68-6e69e706f84c.jpg";
File downloadFile = new File(downloadFilePath);
String downloadFilenName = "下载文件名123" + downloadFile.getName().substring(downloadFile.getName().lastIndexOf("."));
HttpHeaders headers = new HttpHeaders();
//下载显示的文件名,并解决中文名称乱码问题
String downloadFileName = new String(downloadFilenName.getBytes("UTF-8"), "iso-8859-1");
//通知浏览器以attachment(下载方式)打开
headers.setContentDispositionFormData("attachment", downloadFileName);
//applicatin/octet-stream: 二进制流数据(最常见的文件下载)
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
// 使用下org.apache.commons.io.FileUtils工具类
byte[] bytes = FileUtils.readFileToByteArray(downloadFile);
return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.CREATED);
// }
}
- 前端代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传和下载</title>
</head>
<body>
<form action='http://localhost:8080/file/upload' method='post' enctype='multipart/form-data'>
<input type='file' name='file'>
<button type='submit'>上传</button>
</form>
<a href="template/asd.jpg" download="aaname.jpg">下载</a>
</body>
</html>
- 配置依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
转载于:https://blog.csdn.net/qq_42402854/article/details/109177610