Thinking

          快樂編程,開心生活
          posts - 21, comments - 27, trackbacks - 0, articles - -5
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          組件之上傳下載篇

          Posted on 2007-02-06 17:19 lixw 閱讀(521) 評論(0)  編輯  收藏

          一、最簡單的方式:
          設置表單form 的 method=”post” ENCTYPE="multipart/form-data"
          通過
          InputStream in =servletRequest.getInputStream();
          以流的方式處理,它的缺點就不言而喻了

          二、commons-fileupload:
          官方網站:[http://jakarta.apache.org/commons/fileupload/]
          它提供基于Servlet的上傳,可上傳到內存、文件,且文件的上傳位置,最大上傳文件字節數可以在程序中設置,
          特別是對于多文件上傳支持較好,List items = upload.parseRequest(request)就可以處理多文件,其他都不用考慮,
          提供了item.isFormField()判斷是否為標準表單值的方法,簡潔實用,但是可配置仍然不好,對API的依賴性很大

          使用步驟:
          1、首先判斷一個HttpServletRequest是否是一個上傳文件的請求:
          boolean isMultipart = ServletFileUpload.isMultipartContent(request);
          2、處理請求:
          2.1、創建基于硬盤存儲的工廠
          DiskFileItemFactory factory = new DiskFileItemFactory();
          /* 或者
          DiskFileItemFactory factory = new DiskFileItemFactory(yourMaxMemorySize, yourTempDirectory);
          */
          2.2、設置工廠屬性,從而生成個性化ServletFileUpload
          //設置最多只允許在內存中存儲的數據,單位:字節
          factory.setSizeThreshold(yourMaxMemorySize);
          // 設置一旦文件大小超過getSizeThreshold()的值時數據存放在硬盤的目錄
          factory.setRepository(yourTempDirectory);
          2、處理上傳文件:
          Iterator iter = items.iterator();
          while (iter.hasNext()) {
          ?? FileItem item = (FileItem) iter.next();
          ?? //判斷是否為標準表單域
          ?? if (item.isFormField()) {
          ??????? String name = item.getFieldName();
          ?String value = item.getString();
          ???…
          ??? ?} else {
          ??String fieldname = item.getFieldName();
          ??String filename = item.getName();
          ??String contentType = item.getContentType();
          ??boolean isInMemory = item.isInMemory();
          ??long sizeInBytes = item.getSize();
          ??…
          ?//直接從內存訪問上傳數據
          ?byte[] data = item.get();
          ???
          ?//采用流方式讀取上傳文件
          ?InputStream stream = item.openStream();

          ?// 保存到文件
          ?if (writeToFile) {
          ?File uploadedFile = new File(storeFilePath);
          ?item.write(uploadedFile);
          ??? } else {
          ?//轉換為輸出流
          ?InputStream uploadedStream = item.getInputStream();
          ?...
          ?uploadedStream.close();
          ?}
          }
          ...

          三、javazoom的UploadBean:
          官方網站:[http://www.javazoom.net/jzservlets/uploadbean/uploadbean.html]

          功能強大,支持上傳到文件系統,數據庫,同時它還有一些高級功能,如對上傳的監聽,overwrite過濾器、自定義解析器、
          overwrite策略、黑名單、白名單等,特別是它采用了JavaBean方式,所以在JSP頁面可以輕松的采用

          從而實現上傳到硬盤目錄但是它的源代碼是需要Money的,我們只能得到它的jar包和API Doc,
          同時它對多文件上傳處理的不是很好(我覺得)。

          官方網站上有詳細的說明供參考。

          四、Jspsmartupload
          官方網站:[http://www.jspsmart.com/] 可惜一直打不開
          這里有一篇文章說明:[http://java.ccidnet.com/art/3737/20060717/638255_1.html]


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 东乡县| 和田市| 唐山市| 雷山县| 勃利县| 保山市| 武汉市| 阿克| 巴彦县| 九寨沟县| 大名县| 阳信县| 合川市| 旬阳县| 巨野县| 焦作市| 南靖县| 邳州市| 延边| 曲靖市| 峨眉山市| 临武县| 永丰县| 桦南县| 镇巴县| 天长市| 独山县| 二连浩特市| 鸡泽县| 惠来县| 莒南县| 麟游县| 阜南县| 中山市| 科技| 怀仁县| 丰都县| 兴仁县| 娱乐| 耿马| 黄骅市|