java學(xué)習(xí)

          java學(xué)習(xí)

           

          java文件上傳下載

          JAVA的文件上傳遍一直是一個比較關(guān)注的問題,而且有幾個NB東西提供了這個功能.

          用的最多的算是三個(我就知道這三個)比較強(qiáng)的,一個是比較早的jspsmartupload,另一個是出身名族的commonupload,還有一個就是orellay的了.

          我用的比較多是前兩個,總的感覺是jspsmartuplod比較靈活,功能上更強(qiáng)一些(一點(diǎn)點(diǎn)吧),但是現(xiàn)在網(wǎng)上也不維護(hù),也不能下載了,特別是 它上傳的時候把上傳文件放到內(nèi)存里,所以上傳文件的大小會和內(nèi)存有關(guān)系.commonupload雖然沒有提供很多API,但是它有比較靈活,它上傳的過 程中會把上傳的文件先寫入磁盤,所以上傳的大小只是帶寬有關(guān)系,我嘗試最大的上傳文件的大小是700M,當(dāng)然是本地測試:>

          還有是就是在Linux/Unix系統(tǒng)上傳文件的中文問題,我在下面的代碼有了一些解決.

          下面是前兩種方式的上傳代碼:

          try{
          //取session 用戶oid
          int pid = userInfo.getUserId();
          String sys_user_id = String.valueOf(pid);
          //取init配置文件的參數(shù)值
          String sitePhysicalPath = (String)init.getObject("SitePhysicalPath");
          String saveDir = (String)init.getObject("InfoUploadDir");
          String tempDir = (String)init.getObject("InfoUploadDir");
          String fileMemo = ""; //文件說明
          String fileName = null; //存儲到數(shù)據(jù)庫的文件名
          String saveName = null; //存儲到本地的文件名
          String filePath = null; //存儲到數(shù)據(jù)庫的文件路徑
          String savePath = null; //存儲到本地的文件路徑
          long fileSize = 0; //文件大小
          int maxPostSize = -1;
          int dinfo_upload_id = -1;
          %>
          <%
          //初始化
          mySmartUpload.initialize(pageContext);
          //上載文件
          mySmartUpload.upload();
          //循環(huán)取得所有上載文件
          for(int i=0; i<mySmartUpload.getFiles().getCount(); i++)
          {
          //取得上載文件
          com.jspsmart.upload.File file = mySmartUpload.getFiles().getFile(i);
          if(!file.isMissing())
          {
          fileName = file.getFileName();
          //取得文件擴(kuò)展名file.getFileExt()
          try{
          saveName = fileName.substring(fileName.lastIndexOf("."));

          }catch(Exception e){
          saveName = "";
          }
          //取得文件大小
          fileSize = file.getSize();
          //存儲路徑
          String sql_id = " SELECT S_INFO_UPLOAD.nextval as seqid FROM dual ";
          try{
          Statement stmt = con.createStatement();
          ResultSet rst = stmt.executeQuery(sql_id);
          while(rst.next())
          {
          dinfo_upload_id = rst.getInt("seqid");
          }
          }catch(SQLException sqle){
          return;
          }

          filePath = sitePhysicalPath + saveDir + Integer.toString(dinfo_upload_id) + saveName;
          savePath = saveDir + Integer.toString(dinfo_upload_id) + saveName;
          //存儲文件到本地
          file.saveAs(filePath);
          //存儲文件到數(shù)據(jù)庫
          switch(i)
          {
          case 0: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo1"); break;
          case 1: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo2"); break;
          case 2: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo3"); break;
          case 3: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo4"); break;
          case 4: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo5"); break;
          default: fileMemo = "";
          }

          String sql = " INSERT INTO info_upload (info_upload_id,sys_user_id,file_size,file_path,utime,deleted) "
          + " VALUES( " + Integer.toString(dinfo_upload_id) + "," + sys_user_id + "," + fileSize + ",'" + savePath + "', SYSDATE , 0 )" ;
          sqlcmd cmd = new sqlcmd(con,sql);
          //System.out.println(sql);
          java.sql.PreparedStatement pstmt = null;
          java.sql.Statement stmt = null;
          //fileName = fileName.substring(0, fileName.indexOf("."));
          String sql_cn = " UPDATE info_upload SET file_name=?,file_memo=? WHERE info_upload_id=? ";
          java.io.ByteArrayInputStream bais_name = new java.io.ByteArrayInputStream(fileName.getBytes("ISO-8859-1"));
          java.io.InputStreamReader isr_name = new java.io.InputStreamReader((InputStream)bais_name,"GBK");

          java.io.ByteArrayInputStream bais_memo = new java.io.ByteArrayInputStream(fileMemo.getBytes("GBK"));
          java.io.InputStreamReader isr_memo = new java.io.InputStreamReader((InputStream)bais_memo,"GBK");

          try{
          stmt = con.createStatement();
          stmt.getConnection().setAutoCommit(false);

          pstmt = con.prepareStatement(sql_cn);
          pstmt.setCharacterStream(1, isr_name, fileName.length());
          pstmt.setCharacterStream(2, isr_memo, fileMemo.length());
          pstmt.setInt(3, dinfo_upload_id);

          //System.out.println(sql_cn);

          pstmt.execute();
          stmt.executeUpdate("COMMIT");

          }catch(Exception exce){
          System.out.println(exce);
          stmt.executeUpdate("ROLLBACK");
          }
          }
          }
          }catch(Exception e){
          }


          以上是jspsmart的方式,如果想要其它的方式,請下載全部源代碼.



          //upload_fileUpload.jsp

          <%@ include file = "../../backgeneral.jsp"%>
          <%@ contentType="text/html;charset=GBK" %>
          <jsp:useBean id="userInfo" scope="session" class="com.ges.hbgov.UserInfo"/>
          <%@ page import="org.apache.commons.fileupload.*" %>
          <%
          try{
           //request.setCharacterEncoding("GBK");
          //取session 用戶oid
              int pid = userInfo.getUserId();
              String sys_user_id = String.valueOf(pid);
          //取init配置文件的參數(shù)值
           String sitePhysicalPath = (String)init.getObject("SitePhysicalPath");
           String saveDir  = (String)init.getObject("InfoUploadDir");
           String tempDir  = (String)init.getObject("InfoUploadDir");
           String fileMemo = "";    //文件說明
           String fileName = null;  //存儲到數(shù)據(jù)庫的文件名
           String saveName = null;  //存儲到本地的文件名
           String filePath = null;  //存儲到本地的文件路徑
           String savePath = null;  //存儲到數(shù)據(jù)庫的文件路徑
           long   fileSize = 0;     //文件大小
           int maxPostSize = -1;   
           int dinfo_upload_id = -1;
          %>
          <%
              DiskFileUpload df = new DiskFileUpload();
              //設(shè)定上傳文件大小
           df.setSizeMax(maxPostSize);
           //設(shè)定臨時目錄
           df.setRepositoryPath(sitePhysicalPath + tempDir);
              //取得request信息
           List items = df.parseRequest(request);
             
           Iterator iter = items.iterator();
             
           int temp = 0;
           FileItem tempItem = null;

           while(iter.hasNext()){
            temp++;
            FileItem item = (FileItem)iter.next();
            if(item.isFormField())    //取得文件說明信息
            {
             fileMemo = item.getString("GBK");
             
            }
            else
            {   //取得上傳文件信息
             fileName = (String)item.getName();
             try{
              fileName = fileName.substring(fileName.lastIndexOf("//")+1);
              fileName = fileName.substring(fileName.lastIndexOf("/")+1);
             }catch(Exception e){
              System.out.println(e);
             }
             fileSize = item.getSize();
             tempItem = item;
            }

            if(temp == 2 && fileSize != 0)
             {    //每兩個iter存儲一個上傳文件

                       //得到info_title_id
                        String SQL_ID="select S_INFO_UPLOAD.nextval as seqid from dual";
                     try {
                          java.sql.Statement stmt = con.createStatement();
                          java.sql.ResultSet rst= stmt.executeQuery(SQL_ID);
                          while(rst.next())
                 {
                                 dinfo_upload_id = rst.getInt("seqid");
                          }

                       }catch(SQLException e1){
                              return;
                       }
                      //取得文件擴(kuò)展名
                      try{
              saveName = fileName.substring(fileName.lastIndexOf("."));
             }catch(Exception exc){
              saveName = "";
             }

                      filePath = sitePhysicalPath + saveDir + Integer.toString(dinfo_upload_id) + saveName;
                      //存儲文件
             java.io.File uploadFile = new java.io.File(filePath);
             tempItem.write(uploadFile);
             /*try{
                 FileOutputStream fos = new FileOutputStream(filePath);
                 InputStream is = tempItem.getInputStream();
                 byte[] b = new byte[1024];
                 int nRead;
                 long per = 0;
                 double percent = 0;
                          while((nRead = is.read(b, 0, 1024))>0){
                  fos.write(b, 0, nRead);
                  per += nRead;
                  percent = (double)per/fileSize;

                  session.setAttribute("percent",Double.toString(percent).substring(2,4));
                  session.setAttribute("filename",fileName);
                          }
                 is.close();
              fos.close();    
              }catch(Exception e){
               System.out.println(e);
              }*/
                      savePath = saveDir + Integer.toString(dinfo_upload_id) + saveName;
                      /*/存儲數(shù)據(jù)庫
                      String sql = " INSERT INTO info_upload (info_upload_id,sys_user_id,file_name,file_memo,file_size,file_path,utime,deleted) "
                        + " VALUES( " + Integer.toString(dinfo_upload_id) + "," + sys_user_id + ",'" + fileName + "','" + fileMemo + "'," + fileSize + ",'" + savePath + "', SYSDATE , 0 )" ;
             sqlcmd cmd = new sqlcmd(con,sql);
             */
                      String sql = " INSERT INTO info_upload (info_upload_id,sys_user_id,file_size,file_path,utime,deleted) "
                        + " VALUES( " + Integer.toString(dinfo_upload_id) + "," + sys_user_id + "," + fileSize + ",'" + savePath + "', SYSDATE , 0 )" ;
             sqlcmd cmd = new sqlcmd(con,sql);
                      //System.out.println(sql);
             java.sql.PreparedStatement pstmt = null;
             java.sql.Statement stmt = null;
             //fileName = fileName.substring(0, fileName.indexOf("."));
             String sql_cn = " UPDATE info_upload SET file_name=?,file_memo=? WHERE info_upload_id=? ";
             
             java.io.ByteArrayInputStream bais_name = new java.io.ByteArrayInputStream(fileName.getBytes("ISO-8859-1"));
             java.io.InputStreamReader isr_name = new java.io.InputStreamReader((InputStream)bais_name,"GBK");

             java.io.ByteArrayInputStream bais_memo = new java.io.ByteArrayInputStream(fileMemo.getBytes("GBK"));
             java.io.InputStreamReader isr_memo = new java.io.InputStreamReader((InputStream)bais_memo,"GBK");
             
             try{
              stmt = con.createStatement();
              stmt.getConnection().setAutoCommit(false);

              pstmt = con.prepareStatement(sql_cn);
              pstmt.setCharacterStream(1, isr_name, fileName.length());
              pstmt.setCharacterStream(2, isr_memo, fileMemo.length());
              pstmt.setInt(3, dinfo_upload_id);

                          //System.out.println(sql_cn);

              pstmt.execute();
              stmt.executeUpdate("COMMIT");

             }catch(Exception exce){
              System.out.println(exce);
              stmt.executeUpdate("ROLLBACK");
             }

             temp = 0;
            }
            else if (temp == 2 && fileSize == 0) {temp = 0;}

           }
              //session.setAttribute("percent","ok");
          }catch(Exception ex){
           System.out.println(ex);
          }
          response.sendRedirect("list.jsp");

          %>




          //upload_jspSmart.jsp

          <%@ include file = "../../backgeneral.jsp"%>
          <%@ page language="java" import="java.util.*,java.sql.*,java.io.*"%>
          <%@ page language="java" import="com.jspsmart.upload.*"%>
          <%@ page language="java" import="com.ges.hbgov.*"%>
          <jsp:useBean id="userInfo" scope="session" class="com.ges.hbgov.UserInfo"/>
          <jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
          <%
          //System.out.println("page=" + (String)session.getAttribute("SYS_USER_ID"));
          if(!userInfo.Request(request)){
          %>
          <script language=javascript>
           function relogin() {
            this.parent.location.href="../../login.jsp";
           }
           relogin();
          </script>
          <%
          }
          %>

          <%

          try{
          //取session 用戶oid
              int pid = userInfo.getUserId();
              String sys_user_id = String.valueOf(pid);
          //取init配置文件的參數(shù)值
           String sitePhysicalPath = (String)init.getObject("SitePhysicalPath");
           String saveDir  = (String)init.getObject("InfoUploadDir");
           String tempDir  = (String)init.getObject("InfoUploadDir");
           String fileMemo = "";    //文件說明
           String fileName = null;  //存儲到數(shù)據(jù)庫的文件名
           String saveName = null;  //存儲到本地的文件名
           String filePath = null;  //存儲到數(shù)據(jù)庫的文件路徑
           String savePath = null;  //存儲到本地的文件路徑
           long   fileSize = 0;     //文件大小
           int maxPostSize = -1;   
           int dinfo_upload_id = -1;
          %>
          <%
           //初始化
           mySmartUpload.initialize(pageContext);
           //上載文件
              mySmartUpload.upload();
           //循環(huán)取得所有上載文件
              for(int i=0; i<mySmartUpload.getFiles().getCount(); i++)
           {
            //取得上載文件
            com.jspsmart.upload.File file = mySmartUpload.getFiles().getFile(i);
            if(!file.isMissing())
            {
             fileName = file.getFileName();
             //取得文件擴(kuò)展名file.getFileExt()
             try{
              saveName = fileName.substring(fileName.lastIndexOf("."));

             }catch(Exception e){
              saveName = "";
             }
             //取得文件大小
             fileSize = file.getSize();
             //存儲路徑
             String sql_id = " SELECT S_INFO_UPLOAD.nextval as seqid FROM dual ";
             try{
              Statement stmt = con.createStatement();
              ResultSet rst = stmt.executeQuery(sql_id);
              while(rst.next())
              {
               dinfo_upload_id = rst.getInt("seqid");
              }
             }catch(SQLException sqle){
              return;
             }

             filePath = sitePhysicalPath + saveDir + Integer.toString(dinfo_upload_id) + saveName;
             savePath = saveDir + Integer.toString(dinfo_upload_id) + saveName;
             //存儲文件到本地
             file.saveAs(filePath);
             //存儲文件到數(shù)據(jù)庫
             switch(i)
             {
              case 0: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo1"); break;
              case 1: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo2"); break;
                          case 2: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo3"); break;
              case 3: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo4"); break;
              case 4: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo5"); break;
              default: fileMemo = "";
             }

                      String sql = " INSERT INTO info_upload (info_upload_id,sys_user_id,file_size,file_path,utime,deleted) "
                        + " VALUES( " + Integer.toString(dinfo_upload_id) + "," + sys_user_id + "," + fileSize + ",'" + savePath + "', SYSDATE , 0 )" ;
             sqlcmd cmd = new sqlcmd(con,sql);
                      //System.out.println(sql);
             java.sql.PreparedStatement pstmt = null;
             java.sql.Statement stmt = null;
             //fileName = fileName.substring(0, fileName.indexOf("."));
             String sql_cn = " UPDATE info_upload SET file_name=?,file_memo=? WHERE info_upload_id=? ";
             java.io.ByteArrayInputStream bais_name = new java.io.ByteArrayInputStream(fileName.getBytes("ISO-8859-1"));
             java.io.InputStreamReader isr_name = new java.io.InputStreamReader((InputStream)bais_name,"GBK");

             java.io.ByteArrayInputStream bais_memo = new java.io.ByteArrayInputStream(fileMemo.getBytes("GBK"));
             java.io.InputStreamReader isr_memo = new java.io.InputStreamReader((InputStream)bais_memo,"GBK");
             
             try{
              stmt = con.createStatement();
              stmt.getConnection().setAutoCommit(false);

              pstmt = con.prepareStatement(sql_cn);
              pstmt.setCharacterStream(1, isr_name, fileName.length());
              pstmt.setCharacterStream(2, isr_memo, fileMemo.length());
              pstmt.setInt(3, dinfo_upload_id);

                          //System.out.println(sql_cn);

              pstmt.execute();
              stmt.executeUpdate("COMMIT");

             }catch(Exception exce){
              System.out.println(exce);
              stmt.executeUpdate("ROLLBACK");
             }
            }
           }
          }catch(Exception e){
          }

          response.sendRedirect("list.jsp");
          %>

          posted on 2013-01-17 14:31 楊軍威 閱讀(1825) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 赤峰市| 铜川市| 上林县| 宁蒗| 湘西| 封开县| 融水| 吴江市| 上栗县| 海南省| 武功县| 石景山区| 社旗县| 榕江县| 江津市| 隆安县| 北碚区| 江都市| 门头沟区| 且末县| 重庆市| 应城市| 新巴尔虎右旗| 临桂县| 青冈县| 香格里拉县| 奉节县| 牙克石市| 屏东县| 高淳县| 元阳县| 武川县| 佳木斯市| 上思县| 青海省| 左权县| 桦甸市| 通化市| 滨海县| 抚松县| 建平县|