天天看點

檔案上傳的解決方案總結暨CSV檔案解析

檔案上傳的解決方案總結

網上主要有兩種可用的參考元件,

第一種是用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