我已經寫了下面的方法,這是由我的doPost方法調用來解析請求中給出的multipart/form-data
。這一切都很好,我只是不明白髮生了什麼。如果有人能夠在我的嘗試中分解三條線,我會非常感激。我已經閱讀了Apache Commons File Upload documentation,但它對我來說沒有意義,我討厭編寫我不完全理解的代碼。特別是,我想知道在創建工廠和上傳對象時實際發生了什麼。瞭解工作文件上傳解決方案
public static List<FileItem> parseFormRequest(HttpServletRequest request)
{
List<FileItem> items = null;
try
{
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
items = upload.parseRequest(request);
}
catch (FileUploadException error)
{
System.out.println("UploadFileServlet - Error With File Parsing - " + error.getMessage());
}
return items;
}
BONUS幫助!
我還收到upload.parseRequest(request)
的警告,說Type safety: The expression of type List needs unchecked conversion to conform to List<FileItem>
。如果任何人都可以解釋這一點,這將真正幫助我得到我所做的。由於
+1,因爲我差不多寫完一個類似的回覆,但你的措辭更好。 DatabaseFileItemFactory理念適用於未來請求可能需要訪問上載數據的集羣環境。在臨時本地文件僅在接收到原始請求的節點上可用的情況下,數據庫條目的密鑰可以存儲在會話中,並且便宜地複製到其他節點以更好地進行故障轉移處理。 – GargantuChet
我對DiskFileItemFactory感到困惑。這是如何寫入一個文件,以及它在哪裏寫信,因爲我沒有澄清一個位置。它只是寫入一個文件,然後立即刪除它? – gmustudent
「DiskFileItemFactory將內容保存在內存中,對於較小的項目或在磁盤上的臨時文件中,用於較大的項目。大小閾值(高於該閾值的內容將存儲在磁盤上)是可配置的,因爲臨時文件將被創建。「您需要使用FileItem.write(yourFile)將上傳的文件保存到未自動清理的地方。 – mhaller