我是使用的比較簡單的上傳方法
file.transferTo(new File(savePath));直接將文件轉存到想要的路徑
String uploadPath = "D:/datacleanTaskData/";//windows
//String uploadPath = "/webapp/datacleanTaskData/";//linux
String key = new Date().getTime()+"importDataExcel";
try {
//先把文件保存起來,待調用,先放在服務器
File filepath = new File(uploadPath);
String originalFilename = file.getOriginalFilename();
//此處給文件取了別名,你要是沒需求,可以忽略
String fileName = key+originalFilename.substring(originalFilename.indexOf("."),originalFilename.length());
if (!filepath.exists())
filepath.mkdirs();
// 文件保存路徑
String savePath = uploadPath + fileName;
logger.info("-------savePath--------"+savePath);
// 轉存文件
file.transferTo(new File(savePath));
logger.info("-------轉存文件--------wancheng");
} catch (Exception e) {
e.getStackTrace();
}
}
然後是取 文件:
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import org.apache.commons.fileupload.FileItem;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
//上面是jar我也不確定是不是完全的,但是特殊的都有,其實也沒啥特殊的,哈哈
String savePath = (String) param.get("savePath");
String originalFilename = (String) param.get("originalFilename");
//下面這行代碼,只要路徑正確就可以獲取到File文件,y因爲我想調用之前的方法,所以再轉MultipartFile
File pdfFile = new File(savePath);
//下面是轉MultipartFile 的過程,如果你想轉成文件流也可以直接輸出到前臺進行下載
FileItem fileItem = new DiskFileItem("file",Files.probeContentType(pdfFile.toPath()),
false, originalFilename , (int) pdfFile.length(), pdfFile.getParentFile());
InputStream input = new FileInputStream(pdfFile);
OutputStream os = fileItem.getOutputStream();
IOUtils.copy(input, os);
MultipartFile file = new CommonsMultipartFile(fileItem);
//刪除的方法就比較簡單了
根據路徑取到文件,然後執行刪除,但是當文件在使用或者文件夾在使用,是無法刪除成功的,我試了windows當你打開文件夾時刪除失敗,但是不會報錯的,linux可以刪除成功,然後如果你需要清理服務器的緩存文件的話,可以使用這個辦法,取到文件夾,遍歷刪除,我沒寫這方面,就不展示了
File delFile = new File((String) param.get("savePath"));
if(delFile.isFile() && delFile.exists()) {
delFile.delete();
}