posts - 193,  comments - 520,  trackbacks - 0

          commons.fileupload實現文件的上傳,代碼如下:
          <%!
           //服務器端保存上傳文件的路徑
              String saveDirectory = "g:\\upload\\";
              // 臨時路徑 一旦文件大小超過getSizeThreshold()的值時數據存放在硬盤的目錄
              String tmpDirectory = "g:\\upload\\tmp\\";
              // 最多只允許在內存中存儲的數據大小,單位:字節
              int maxPostSize = 1024 * 1024;
          %>
          <%
              // 文件內容 
              String FileDescription = null;
              // 文件名(包括路徑)
              String FileName = null;
              // 文件大小
              long FileSize = 0;
              // 文件類型
              String ContentType = null;

          %>

          <%
             DiskFileUpload fu = new DiskFileUpload();
              // 設置允許用戶上傳文件大小,單位:字節
             fu.setSizeMax(200*1024*1024);
              // 設置最多只允許在內存中存儲的數據,單位:字節
             fu.setSizeThreshold(maxPostSize);
              // 設置一旦文件大小超過getSizeThreshold()的值時數據存放在硬盤的目錄
             fu.setRepositoryPath("g:\\upload\\tmp\\");
              //開始讀取上傳信息 得到所有文件
             try{
                List fileItems = fu.parseRequest(request);
               }catch(FileUploadException e){
                   //這里異常產生的原因可能是用戶上傳文件超過限制、不明類型的文件等
                   //自己處理的代碼
               }
          %>
          <%
             // 依次處理每個上傳的文件
             Iterator iter = fileItems.iterator();
             while (iter.hasNext()) {
               FileItem item = (FileItem) iter.next();
                 //忽略其他不是文件域的所有表單信息
               if (!item.isFormField()) {
                 String name = item.getName();
                 long size = item.getSize();
                 String  contentType = item.getContentType();
               if((name==null||name.equals("")) && size==0)
                 continue;
          %>
          <%
             //保存上傳的文件到指定的目錄
            String[] names=StringUtils.split(name,"\\");  //對原來帶路徑的文件名進行分割
             name = names[names.length-1];
             item.write(new File(saveDirectory+ name));
            }
          }
          %>
           下面是其簡單的使用場景:
           A、上傳項目只要足夠小,就應該保留在內存里。
           B、較大的項目應該被寫在硬盤的臨時文件上。
           C、非常大的上傳請求應該避免。
           D、限制項目在內存中所占的空間,限制最大的上傳請求,并且設定臨時文件的位置。
           
           可以根據具體使用用servlet來重寫,具體參數配置可以統一放置到一配置文件
           



           文件的下載用servlet實現
                public void doGet(HttpServletRequest request,
                                 HttpServletResponse response)
               {
                   String aFilePath = null;    //要下載的文件路徑
                   String aFileName = null;    //要下載的文件名
                   FileInputStream in = null;  //輸入流
                   ServletOutputStream out = null;  //輸出流

                   try
             {
                    
                       aFilePath = getFilePath(request);
                       aFileName = getFileName(request);

                       response.setContentType(getContentType(aFileName) + "; charset=UTF-8");
                       response.setHeader("Content-disposition", "attachment; filename=" + aFileName);

                       in = new  FileInputStream(aFilePath + aFileName); //讀入文件
                      out = response.getOutputStream();
                      out.flush();
                      int aRead = 0;
                     while((aRead = in.read()) != -1 & in != null)
                  {
                       out.write(aRead);
                   }
                     out.flush();
                }
                 catch(Throwable e)
               {
               log.error("FileDownload doGet() IO error!",e);
                }
                   finally
                   {
                       try
                       {
                           in.close();
                           out.close();
                       }
                       catch(Throwable e)
                       {
                        log.error("FileDownload doGet() IO close error!",e);
                       }
                   }
               }



          http://www.aygfsteel.com/ronghao 榮浩原創,轉載請注明出處:)
          posted on 2005-12-16 10:46 ronghao 閱讀(6249) 評論(1)  編輯  收藏 所屬分類: j2se基礎

          FeedBack:
          # re: 用commons.fileupload實現文件的上傳和下載
          2005-12-16 11:05 | wolfsquare
          還是Webwork爽,聲明即所得.
          只需要在action里聲明public setFiles(File[] files){...}即可直接使用上傳到的文件,哪里用那么麻煩啊..  回復  更多評論
            
          <2005年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          關注工作流和企業業務流程改進。現就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

          常用鏈接

          留言簿(38)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          常去的網站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 定边县| 上虞市| 江口县| 海兴县| 略阳县| 福州市| 阿瓦提县| 电白县| 河西区| 海安县| 西丰县| 渑池县| 高要市| 子洲县| 万盛区| 遵义市| 来凤县| 福安市| 呼和浩特市| 玛纳斯县| 高碑店市| 新巴尔虎右旗| 洪江市| 常山县| 屯门区| 唐河县| 七台河市| 孟村| 龙南县| 昭苏县| 铜山县| 揭西县| 台湾省| 如东县| 平江县| 古丈县| 筠连县| 灵山县| 西昌市| 个旧市| 天等县|