1. 程式人生 > 實用技巧 >java 檔案上傳的那些事

java 檔案上傳的那些事

檔案上傳

邏輯

    @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);

選擇其中的一種 個人喜歡第二個