一、單個文件上傳 前端代碼可參考elementUI,後端代碼主要上傳一個文件MultipartFile multipartFile @PostMapping("/upload") public ObjectRestResponse uploadKnowledge(@RequestParam(valu ...
一、單個文件上傳
前端代碼可參考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("======================");
}
}
}
- 結果: