核心矛盾
本地測試使用本地絕對路徑(如 `D:\img.jpg`)上傳成功,局域網其他機器瀏覽同一 JSP 頁面上傳時,服務器嘗試讀取**客戶端本地路徑**,導致 `FileNotFoundException`。
根因確認
- 代碼使用 `request.getParameter("image")` 獲取文件名,再 `new FileInputStream(filename)` 讀取。
- 這要求服務器能訪問客戶端文件系統,**絕不可能**(除非共享目錄並映射盤符,極不推薦)。
徹底解決:標準文件上傳流程
- 表單設置 `enctype="multipart/form-data"`。
- 後端使用 `request.getPart("image")` (Servlet 3.0) 或 `Commons FileUpload` 解析流。
- 直接操作 `InputStream` 存入數據庫/磁盤,**不涉及客戶端路徑**。
驗證方法
在本地測試時,刻意選擇**非服務器機器上的路徑**(如 U 盤、網絡鄰居路徑),若仍「成功」,說明代碼實際讀取的是服務器端同名文件,而非真正上傳內容——極具欺騙性。
JSP 文件上傳局域網失敗,getParameter 獲取文件名非流,multipart/form-data 標準上傳流程,Servlet 3.0 Part API 代碼示例。