檔案上傳的解決方案總結
網上主要有兩種可用的參考元件,
第一種是用jspSmartUpload元件,參考資料:http://www.zhuoda.org/lunzi/20971.html,
第二種是用Apache組織的commons項目中的FileUpload元件,參考資料http://www.blogjava.net/lushengdi/archive/2009/01/09/227063.html。
今天介紹第二種方案中的檔案上傳,檔案下載下傳功能則可細想而知。
第二種方案中檔案上傳,其實就是将request對象中的inputStream解析出來,并擷取檔案的資訊流,将檔案資訊流存儲到伺服器上。
舉個例子:以下視圖包括了一個檔案上傳的form表單
Form表單中是這樣描述的:
<form name="contact_addPatch" enctype="MULTIPART/FORM-DATA" method=post>
……
</form>
注意enctype值需要寫成MULTIPART/FORM-DATA
當點選确定之後,送出給了一個servlet來處理,servlet則在request對象中分析這個inputstream流檔案,
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e1) {
e1.printStackTrace();
}
Iterator iter = items.iterator();
//擷取form表單裡面的資訊
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String fieldName = item.getFieldName();
String fieldValue = item.getString(ENCODING);
if (fieldName.equals("ins_id2")) {
request.setAttribute("ins_id2", fieldValue);
}
}
else {
InputStreamReader inputStreamReader = new InputStreamReader (item.getInputStream());
……
}
}
這就是整個分析的過程,inputStreamReader對象則可以按行讀取,也可以寫到磁盤上。
此例中還有一個亮點,讀取csv檔案。其實csv檔案就是一個txt檔案形式。它隻不過是将文本資訊通過逗号分割起來了。是以,隻要按照“,”來分取csv檔案中的資訊,則可以讀取成功。
資訊字段的校驗可以通過java.util.regex.Pattern;來實作,至于Pattern如何使用,敬請參考sun的java手冊。
附件中的一個例子,就是從用戶端擷取csv檔案,并讀取裡面的首列的。
參考資料:
http://www.knowsky.com/4257.html
http://www.zhuoda.org/lunzi/20971.html
http://www.blogjava.net/lushengdi/archive/2009/01/09/227063.html
http://www.ymjc.com.cn/development/p344/J34442370.shtml
http://www.diybl.com/course/3_program/java/javashl/2008520/117162.html