首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SSH (Struts2) 圖片/音樂上傳:realpath vs imagePath 路徑區別與資料庫存儲策略

     編輯:程式設計綜合問答

核心概念區別

變數含義用途範例
`realpath`**伺服器絕對檔案系統路徑**`FileUtils.copyFile()` 寫入實體檔案時必須用的完整路徑`D:\apache-tomcat\webapps\sDemo\upload\`
`imagePath` / `musicPath`**Web 應用相對路徑 (Context Path 相對)**存入資料庫、前端 ``、``/sDemo/upload/uuid.jpg`

為什麼資料庫存 `imagePath` 而非 `realpath`?

  1. 可攜性:專案遷移伺服器、`webapps` 目錄變更、`Context Path` 變更時,**相對路徑不需改動**,絕對路徑全掛。
  2. 安全性:不暴露伺服器真實目錄結構。
  3. 前端直用:JSP/HTML 直接 ``,無需後端轉換。

兩者關聯機制

**Tomcat 靜態資源映射**:`webapps/sDemo/upload/` 目錄下的檔案,自動對應 URL `https://host:port/sDemo/upload/`。
`realpath` = 磁碟物理位置 → 寫入檔案。
`imagePath` = URL 路徑 → 讀取/顯示檔案。
**中間橋樑 = Tomcat 的 `Context` 映射 (`docBase` 指向 `webapps/sDemo`)。**

音樂上傳同理


// 上傳邏輯完全一樣,僅副檔名/Content-Type/資料表欄位不同
String lastName = musicFileName.substring(musicFileName.lastIndexOf(".") + 1);
String name = UUID.randomUUID() + "." + lastName;
File saveFile = new File(new File(realpath), name);
FileUtils.copyFile(music, saveFile);
String musicPath = "/sDemo/upload/" + name; // 存資料庫

// 前端播放
// 

最佳實踐補充

  • **檔案名用 UUID + 原副檔名**,避免中文檔名編碼問題、覆蓋衝突。
  • **上傳目錄獨立於代碼目錄**(如 `/data/uploads/`),配置 Tomcat `Context docBase` 或 Nginx `alias` 映射,便於遷移、備份、CDN 加速。
  • **大檔案斷點續傳**:前端 `plupload`/`WebUploader` + 後端分片合併,避免超時/記憶體溢位。
  • **圖片壓縮/縮略圖**:上傳後非同步生成縮圖(`Thumbnailator`/`ImageIO`),列表頁載入縮圖,詳情頁載原圖。

總結

`realpath` 給 `File` 寫入用,`imagePath` 給資料庫/前端用。**Tomcat 靜態資源映射**連接兩者。音樂上傳邏輯完全復用,僅副檔名/MIME/播放標籤不同。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved