首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

手把手打造 Java 版雲相冊:多文件上傳、下載、權限控制與目錄分散

     編輯:Java 相關知識

專案功能

  • 多文件批量上傳(動態增減文件欄位)。
  • 圖片瀏覽(縮略圖 + 原圖查看)。
  • 文件下載(支援中文文件名)。
  • 刪除權限控制(僅限上傳者 IP)。
  • Hash 目錄分散存儲(優化文件系統性能)。

技術棧

  • Servlet 3.0 + JSP + JavaScript(前端動態表單)。
  • Commons FileUpload / IO(文件上傳下載)。
  • Dom4j + XPath(XML 數據存儲)。
  • UUID + Hash 算法(文件命名與目錄分散)。

核心代碼結構

1. 配置文件

web.xml: Servlet 映射(/upload, /cloudPhoto, /servlet/DownServlet, /servlet/DelServlet)
photo.xml: 根節點 <photos/>,存放所有圖片元數據

2. 工具類

// MyUtils
public static String getUUID() { return UUID.randomUUID().toString().replace("-", ""); }
public static String getDir(String uuid) {
    String d1 = Integer.toHexString(uuid.hashCode() & 0xf);
    String d2 = Integer.toHexString((uuid.hashCode() & 0xf0) >> 4);
    return "/" + d1 + "/" + d2; // 如 /3/a/
}
public static String getCurrentDateTime() { /* yyyy年MM月dd日 HH:mm:ss */ }

// Dom4jFactory:單例 Document,類載入器獲取資源路徑
static {
    SAXReader sax = new SAXReader();
    String path = Dom4jFactory.class.getClassLoader().getResource("photo.xml").getPath();
    dom = sax.read(new FileInputStream(path));
}
public static Document getDocument() { return dom; }
public static boolean save() { /* XMLWriter 寫回 */ }
public static boolean del(String uuid) { /* XPath 刪除節點 */ }

3. 領域模型

PhotoModel: uuid, realName, ext, dir, dateTime, ip, desc

4. DAO 層(介面 + 實現 + 工廠)

PhotoDao: save, getAll, getSingleByUuid, deleteXml, deleteFile
PhotoSerImpl: Dom4j 操作 XML 增刪改查
PhotoDaoFactory: 靜態工廠獲取實現

5. Servlet 控制器

  • UploadServlet:
    • 驗證 multipart/form-data。
    • 解析 FileItem 列表,成對處理(文件 + 描述)。
    • 生成 UUID、Hash 目錄、時間戳、IP。
    • 先寫 XML,成功後再 FileItem.write() 保存文件。
  • cloudPhotoServlet:
    • 簡單密碼保護(pwd=chx)。
    • 查詢所有記錄,生成 HTML 表格展示圖片、時間、描述、操作鏈接。
  • DownServlet:
    • Content-Type: application/force-download。
    • 根據 User-Agent 處理文件名編碼(Firefox ISO-8859-1,其他 URLEncoder)。
    • 流式輸出文件內容。
  • DelServlet:
    • 驗證請求 IP 與記錄 IP 一致。
    • 刪除 XML 節點 + 物理文件。
    • 重定向回相冊頁。

6. 前端頁面

  • index.jsp:JS 動態增減 <input type="file">,支援批量上傳。
  • 上傳成功提示、跳轉相冊。

關鍵技術亮點

擴展方向

  • 遷移至資料庫(MySQL)+ MyBatis,支援高併發。
  • 引入 Spring Security 完善認證授權。
  • 增加圖片壓縮、水印、格式轉換(ImageIO/Thumbnailator)。
  • 前端升級為 Vue/React + RESTful API。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
技術點實現細節
多文件上傳JS 動態生成 fileN/textN 對,Servlet 成對解析
目錄分散UUID hashCode 低 8 位 → 兩級 16 進制目錄,理論支援 256x256=65536 子目錄
原子性保存先寫 XML 元數據,成功後落盤文件,失敗則不生成孤兒文件
權限控制記錄上傳 IP,刪除時比對 request.getRemoteAddr()
中文下載User-Agent 區分瀏覽器編碼策略