1. 配置pom,引入依赖包
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.可以配置文件大小限制
spring:
servlet:
multipart:
max-file-size: 5Mb
max-request-size: 10Mb
3.控制器主要代码
@RestController
@RequestMapping(value = "/files")
public class FileManageController {
/**
* 文件上传
*
* @param file
* @return
*/
@PostMapping(value = "/upload")
public String upload(@RequestParam("fileName") MultipartFile file) {
if (file.isEmpty()) {
return "请选择一个文上传";
}
String filename = file.getOriginalFilename();
long fileSize = file.getSize();
System.out.println("文件名称" + filename + "-------文件大小" + fileSize);
String path = "F:/workspace/test/file/manage";
File dest = new File(path + "/" + filename);
if (!dest.getParentFile().exists()) {
//父目录不存在就创建一个
dest.getParentFile().mkdir();
}
//保存文件
try {
file.transferTo(dest);
return "文件上传成功";
} catch (IOException e) {
e.printStackTrace();
return "文件上传失败";
}
}
/**
* 文件下载
*
* @param response
* @return
*/
@GetMapping(value = "/download")
public String download(HttpServletResponse response) {
String fileName = "测试文件上传与下载.docx"; //文件名
String filepath = "F:/workspace/test/file/manage"; //要读取的文所在路径
File file = new File(filepath + "/" + fileName);
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = response.getOutputStream();
bis = new BufferedInputStream(new FileInputStream(file));
int i = bis.read(buff);
while (i != -1) {
os.write(buff, 0, buff.length);
os.flush();
i = bis.read(buff);
}
} catch (IOException e) {
e.printStackTrace();
return "文件上传失败";
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "文件上传成功";
}
}
4.总结
至此,简单的文件上传和下载功能就已经实现了。
后续,将会提升功能完整性和灵活性。包括但不限于:
- 升级功能为以微服务形式向其他服务服务提供文件管理功能。
- 支持大文件上传和下载功能。
- 支持断点续传。