文件上传
文章也是从多个方面查找资料然后自己总结的一些有关文件上传的内容
主要使用MultipartFile类来接受上传的文件
单文件上传的controller示例:
package com.xl.controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
@CrossOrigin
@RestController
@RequestMapping("/test")
public class UpLoadAndDownLoad {
@PostMapping("/upload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
if (file.isEmpty()) {
return "上传失败,请选择文件";
}
//文件名
String fileName = file.getOriginalFilename();
//后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
//大小(单位是字节,可以加入判断)
int size=(int)file.getSize();
System.out.println("后缀名:"+suffixName);
System.out.println("文件名:"+fileName);
System.out.println("文件大小:"+size);
//最后保存的文件名
fileName= UUID.randomUUID()+suffixName;
System.out.println("最后保存的文件名称:"+fileName);
//声明保存的路径(可以在application.yml中获取)
String filePath = "E://test/upload/01/";
//使用File进行上传
File dest = new File(filePath + fileName);
//检测是否存在该目录
if (!dest.getParentFile().exists()) {
//不存在则创建当前目录
dest.getParentFile().mkdirs();
}
//这是使用输出流的方式
BufferedOutputStream stream = null;
try {
//转存 (上传) 直接使用MultipartFile进行保存
// file.transferTo(dest);
//这里的两种方式都可以使用
// 使用输出流的方式
stream = new BufferedOutputStream(new FileOutputStream(filePath+fileName));
stream.write(file.getBytes());
stream.flush();
System.out.println("上传成功");
return "上传成功";
} catch (IOException e) {
System.out.println(e.toString());
}finally {
//当使用输出流的方式时需要关流
if(stream!=null){
stream.close();
}
}
return "上传失败!";
}
}
一个简单的文件上传就完成了!
注意:前台中需要设置提交方式为post enctype=“multipart/form-data” 否则不能识别为文件上传
前台简单代码
<!DOCTYPE html>
<html>
<head>
<title>单文件上传</title>
</head>
<body>
<form method="post" action="http://localhost:8080/test/upload" enctype="multipart/form-data">
<input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
这是实现了单文件的上传,多文件上传时前台需要加一个属性才可以选择多个文件:
<form method="post" action="http://localhost:8080/test/upload" enctype="multipart/form-data">
<input type="file" name="file" multiple><br>
<input type="submit" value="提交">
</form>
此时的后台只需要使用HttpServletRequest来接受,然后调用我们单个文件上传的方法就可以了
代码:
@PostMapping("/uploads")
@ResponseBody()
public String uploads(HttpServletRequest request){
List<MultipartFile> list=((MultipartHttpServletRequest) request).getFiles("file");
String info=null;
for (MultipartFile file:list) {
try {
String s =upload(file);
info=info+s;
} catch (Exception e) {
e.printStackTrace();
}
}
return info;
}
多文件上传完成。
文章只是实现的一种方式,但写法上有很大的欠缺,如何命名方法如何使用还是看自己的实际需求