前言
文件的上傳和下載是所有後端程序員會經常用到的操作,最近Springboot項目恰好有文件上傳與下載的需求,爲了增強記憶,就記錄下來,若是其中有哪些不足的地方,請指出來,增強學習交流。
配置文件準備工作
首先,先在 application.yml 配置文件中配置上傳文件限制,這個根據自身需求來做調整。
其次,指定需將文件上傳到哪個服務器下的具體路徑。
工具類準備工作
UploadFolderEnum 類主要是將文件存在服務器具體某個文件下,以及其文件格式等。
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public enum UploadFolderEnum {
IMAGE("imageWeb","jpg","jpg,png,jpeg"),
PDF("userPdf","pdf","pdf"),
HTML("userHtml","html","html"),
IMAGE_APP("imageApp","jpg","jpg,png,jpeg"),
DOC("userDoc","doc","doc"),
EXCEL("config","xlsx","xlsx"),
UploadFolderEnum(String folderName,String suffix) {
this.folderName = folderName;
this.suffix=suffix;
}
UploadFolderEnum(String folderName,String suffix,String fileType) {
// 文件路徑
this.folderName = folderName;
// 默認後綴
this.suffix=suffix;
// 文件 准許後綴類型
this.fileType=fileType;
}
private String folderName;
private String suffix;
private String fileType;
public String getFolderName() {
return folderName;
}
public String doDateFilePath(){
return "/"+this.folderName+"/"+ getNowDate();
}
public String getNowDate(){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String time = df.format( new Date( ) );
return time;
}
public String getDefaultFileName(String suffix){
if(fileType.contains(suffix)){
return CommonUtil.retrieveUUID()+"."+suffix;
}
return getDefaultFileName();
}
public String getDefaultFileName(){
return CommonUtil.retrieveUUID()+"."+suffix;
}
}
單文件上傳
引入服務器IP地址,文件存放路徑,文件命名格式。
單文件上傳的核心代碼,這是相對比較簡單的方式,都是一些業務代碼。
@PostMapping("/uploadFile")
@ApiOperation(value = "文件上傳 單文件")
public ObjectRestResponse Upload(@RequestParam("file") MultipartFile file) {
//記錄日誌
log.info("開始上傳文件!");
//文件判斷爲空
if (file.isEmpty()) {
return ObjectRestResponse.error("上傳失敗,請選擇文件");
}
//獲取文件原始名稱
String fileOriginalName = file.getOriginalFilename();
//設置文件前綴
String fliePrefix;
//設置文件後綴
String fileSuffix;
fliePrefix = UUID.randomUUID().toString().replace("-", "");
fileSuffix = fileOriginalName.split("\\.")[1];
String newfilePath = image.doDateFilePath() + "/";
//唯一服務地址
String newfilePathOnly = basePath + newfilePath;
//判斷地址是否存在
File fileUIS = new File(newfilePathOnly);
//如果不存在文件夾創建文件夾
if (!fileUIS.exists()) {
fileUIS.mkdirs();
}
String OnlyStr = newfilePathOnly + fliePrefix + "." + fileSuffix;
//設置文件載入到的地址
File dest = new File(OnlyStr);
try {
file.transferTo(dest);
log.info("文件:" + fliePrefix + "." + fileSuffix + "上傳成功");
String filePath = fileIp + newfilePath + fliePrefix + "." + fileSuffix;
Map<String, Object> object = new HashMap<>();
object.put("filePath", filePath);
object.put("UUID", fliePrefix);
return ObjectRestResponse.success(object);
} catch (IOException e) {
log.error(e.toString(), e);
}
return ObjectRestResponse.error("上傳失敗!");
}
這就是簡單的單文件上傳到服務器上的一種方式,若是存在不足,歡迎大家指出!!!