一、前端的要求
1.采用post方式提交数据
2.采用multipart格式上传文件
3.使用input的file控制上传
例:
<form method="post" action="/common/upload" enctype="multipart/form-data">
<input name="file" type="file"/>
<input type="submit" value="提交" />
</form>
二、导入对应坐标
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
三.后端处理
1.上传文件
使用MultipartFile来获取文件信息以及转存文件
代码如下(示例):
@Value("${reggie.path}")
private String reggiepath;
/**
* 文件上传
*/
@PostMapping("/upload")
public Result<String> upfile(MultipartFile file) {
// 获取文件名
String originalFilename = file.getOriginalFilename();
// 获取文件后缀名
String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
// 用UUID随机生成文件名,防止文件名重复导入文件覆盖
String filename = UUID.randomUUID().toString() + substring;
// 判断当前文件是否存在
File file1 = new File(reggiepath);
if (!file1.exists()) {
// 不存在,需要创建
file1.mkdir();
}
// 保存文件到指定位置
try {
file.transferTo(new File(reggiepath + filename));
} catch (IOException e) {
throw new FileException("文件上传失败");
}
return Result.success(filename);
}
2.下载文件
/**
* 文件下载
*/
@GetMapping("/download")
public void download(String name, HttpServletResponse response) {
try {
// 输入流,读取文件内容
FileInputStream fileInputStream = new FileInputStream(new File(reggiepath+name));
// 输出流,将文件写回浏览器
ServletOutputStream servletOutputStream = response.getOutputStream();
// 响应格式(图片)
response.setContentType("image/jpeg");
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fileInputStream.read(bytes)) != -1) {
servletOutputStream.write(bytes,0,len);
servletOutputStream.flush();
}
fileInputStream.close();
servletOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
3.配置类配置上传的文件大小
如果是springboot过程的话有默认,可以不用配置