单个文件上传和批量文件上传
作者:互联网
一、单个文件上传
前端代码可参考elementUI,后端代码主要上传一个文件MultipartFile multipartFile
@PostMapping("/upload")
public ObjectRestResponse uploadKnowledge(@RequestParam(value = "multipartFile") MultipartFile multipartFile) throws IOException {
Map<String, Object> map = new HashMap<String, Object>();
System.out.println("multipartFile.getOriginalFilename() = " + multipartFile.getOriginalFilename());
String originalFilename = multipartFile.getOriginalFilename();
String substring = originalFilename.substring(originalFilename.lastIndexOf('.'));
System.out.println(multipartFile.getName());
if (multipartFile != null) {
// 设置文件名称
map.put("nameParam", multipartFile.getName());
// 设置文件名称
map.put("fileName", multipartFile.getName());
// 设置文件类型
map.put("contentType", multipartFile.getContentType());
// 设置文件大小
map.put("fileSize", multipartFile.getSize());
// 创建文件名称
String fileName = UUID.randomUUID() + substring;
// 获取到文件的路径信息
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
//文件存储路径
String filePath = "G:\\creo\\product\\" + fileName;
// 打印保存路径
System.out.println(filePath);
// 保存文件的路径信息,因为是本地存的,所以我返回的是可以访问的路径,到时候查可以直接查出来,
// 将上传文件这个接口抽出来,可以复用,返回的路径可以存到相应的数据库
map.put("filePath", "192.168.1.125:8765/product/" + fileName);
// 创建文件
File saveFile = new File(filePath);
// 文件保存
multipartFile.transferTo(saveFile);
}
return new ObjectRestResponse().data(map);
}
postman或者apiFox测试如下:
二、批量上传
批量上传主要是传一个路径,然后一层一层的读取文件,将文件上传到服务器中,我的还是上传到本地中。注意上传文件的大小是否有限制,如果报错可以参考:DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
-
目标:上传下面这个文件夹
-
后端代码测试:
@Test
public void readFiles() throws Exception{
//上传路径
String path = "E:\\英语\\【初中英语教资面试】必看资料@Bilibili CocoPolaris";
readFilesDir(path);
}
//解析文件夹
private void readFilesDir(String path) throws Exception {
LinkedList<File> dirList = new LinkedList<>();
LinkedList<String> fileList = new LinkedList<>();
File file = new File(path);
File[] files = file.listFiles();
for (File file1 : files) {
if (file1.isDirectory()){
dirList.add(file1);
}else {
FileInputStream fileInputStream = new FileInputStream(file1);
MockMultipartFile mockMultipartFile = new MockMultipartFile(file1.getName(), file1.getName(), "application/json", fileInputStream);
//System.out.println("mockMultipartFile = " + mockMultipartFile.getName());
fileList.add(file1.getAbsolutePath());
System.out.println("file1 = " + file1.getAbsolutePath());
// 创建文件名称
String fileName = UUID.randomUUID() + "."
+ file1.getName();
String filePath = "G:\\temp\\" + fileName;
// 打印保存路径
System.out.println(filePath);
// 创建文件
File saveFile = new File(filePath);
// 文件保存
mockMultipartFile.transferTo(saveFile);
}
}
File temp;
while ((!dirList.isEmpty())){
temp=dirList.removeFirst();
if (temp.isDirectory()){
files = temp.listFiles();
if (files==null) continue;
for (File file1 : files) {
if (file1.isDirectory()){
dirList.add(file1);
}else {
FileInputStream fileInputStream = new FileInputStream(file1);
MockMultipartFile mockMultipartFile = new MockMultipartFile(file1.getName(), file1.getName(), "application/json", fileInputStream);
// System.out.println("mockMultipartFile = " + mockMultipartFile.getName());
fileList.add(file1.getAbsolutePath());
System.out.println("file1 = " + file1.getAbsolutePath());
// 创建文件名称
String fileName = UUID.randomUUID() + "."
+ file1.getName();
//存储的路径
String filePath = "G:\\temp\\" + fileName;
// 打印保存路径
System.out.println(filePath);
// 创建文件
File saveFile = new File(filePath);
// 文件保存
mockMultipartFile.transferTo(saveFile);
}
}
}else {
System.out.println("======================");
}
}
}
- 结果:
标签:文件,file1,批量,filePath,getName,File,new,multipartFile,上传 来源: https://www.cnblogs.com/jasmine-e/p/16252745.html