java 檔案上傳的那些事
阿新 • • 發佈:2021-01-20
檔案上傳
邏輯
@Value("${sava_path}") private String sava_path; @Override public String saveFile(MultipartFile multipartFile) { //獲取上傳檔名 String oldName; // 儲存的檔名 String fileName = null; //判斷檔案是否為空 if (!multipartFile.isEmpty()) { oldName= multipartFile.getOriginalFilename(); fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1); //建立檔案物件 File file = new File(sava_path + fileName); //判斷當前資料夾目錄在計算機是否存在 if (!file.getParentFile().exists()) {//建立檔案目錄 file.getParentFile().mkdirs(); try { //儲存檔案 multipartFile.transferTo(file); }catch (Exception e){ e.printStackTrace(); return "檔案上傳失敗"; } }else { //判斷檔案是否存在 if (!file.exists()) { try { //儲存檔案 multipartFile.transferTo(file); } catch (Exception e) { e.printStackTrace(); } }else{ //重新命名 fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1); file = new File(sava_path + fileName); try { //儲存檔案 multipartFile.transferTo(file); } catch (Exception e) { e.printStackTrace(); } } } } else { return "檔案為空"; } return "上傳成功"; }
配置
// application.yml 格式 sava_path: D:\testFile\ //application.properties 格式 sava_path=D:\testFile\
按照自己的習慣選其中之一新增在你的配置檔案 (sava_path 存放檔案的目錄)
生成檔名
/** * 時間戳加上傳檔案的字尾 * System.currentTimeMillis() 時間戳 * oldName.substring(oldName.indexOf(".")+1) 上傳檔名中第一次出現.後的所有字元 +1 是為了排除. */ String fileName = System.currentTimeMillis()+"."+oldName.substring(oldName.indexOf(".")+1);
/** * 生成字母加數字的隨機數 * @param length 長度 * @return */ public static String getStringRandom(int length) { String val = ""; Random random = new Random(); //引數length,表示生成幾位隨機數 for (int i = 0; i < length; i++) { String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num"; //輸出字母還是數字 if ("char".equalsIgnoreCase(charOrNum)) { //輸出是大寫字母還是小寫字母 int temp = random.nextInt(2) % 2 == 0 ? 65 : 97; val += (char) (random.nextInt(26) + temp); } else if ("num".equalsIgnoreCase(charOrNum)) { val += String.valueOf(random.nextInt(10)); } } return val; } /** * getStringRandom(15) 呼叫上面的方法 給出你所需檔名的長度 * 其他的和時間戳的一致 */ fileName = getStringRandom(15) + "." + oldName.substring(oldName.indexOf(".") + 1);
選擇其中的一種 個人喜歡第二個