每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發(fā)
          最近關(guān)心的內(nèi)容:SSH,seam,flex,敏捷,TDD
          本站的官方站點是:顛覆軟件

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks
          key words: 文件上傳,upload, cos.jar + uploadbean.jar + filemover.jar

          以前用cos作文件上傳,但是對于文件上傳后的改名還需要借助其他的工具。

          摘錄如下:


          在用Java開發(fā)企業(yè)器系統(tǒng)的使用,特別是涉及到與辦公相關(guān)的軟件開發(fā)的時候,文件的上傳是客戶經(jīng)常要提到的要求.因此有 一套很好文件上傳的解決辦法也能方便大家在這一塊的開發(fā).

          首先申明,該文章是為了自己記錄一備以后開發(fā)需要的時候,不用手忙腳亂哈哈........

          現(xiàn)在在國內(nèi)用的非常多的一般是兩種方法解決來解決文件上傳.

          cos.jar + uploadbean.jar + filemover.jar
          這個是用的非常普遍的,原因是因為他操作方便,是我們不必再去關(guān)注,那些文件的輸入和輸出流,使我們從底層的流中解脫出來.
          UploadFile,UploadBean,MultipartFormDataRequest

          <%@?page?contentType="text/html;charset=gb2312"?%>
          <head>
          <title>fbysss?UploadBean?示例</title>
          <!--meta?http-equiv="Content-Type"?content="text/html;?charset=iso-8859-1"-->
          <!--meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312"-->
          </head>
          <FORM?name="form1"?METHOD="POST"?ACTION="sssupload.jsp"?ENCTYPE="multipart/form-data">
          <input?name="title"?type=?"text"?value="中文字">
          <td?class="bodystyle">附件</td>
          <td?class="bodystyle">?<input?name="attach"?type="FILE"?id="attach"?size="50"?>?</td>
          <input?name="ok"?type=?"submit"?value="提交">
          </form>

          2.讀取表單頁面sssgetdata.jsp

          <!--
          //==========================================================================
          //文件:UploadBean上傳實例
          //功能:解決中文亂碼,完成文件上傳,并提供上傳改名解決方案
          //作者:fbysss
          //msn:jameslastchina@hotmail.com
          //==========================================================================
          -->
          <%@?page?contentType="text/html;charset=GBK"?%>
          <%@?page?language="java"?import="com.jspsmart.upload.*">
          <%@?page?import="java.text.SimpleDateFormat">
          <%@?page?import="java.io.File">
          <%@?page?import="java.util.*">
          <%@?page?import="javazoom.upload.*">
          <%@?page?import="uploadutilities.FileMover">
          <head>
          <meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312">
          </head>
          <%?
          request
          .setCharacterEncoding("GBK");//設(shè)置編碼格式,就不用一個個轉(zhuǎn)碼了。
          FileMover?fileMover?
          =?new?FileMover();//你也可以使用自帶的實例中jsp:useBean的形式。
          UploadBean?upBean?
          =?new?UploadBean();
          MultipartFormDataRequest?mrequest?
          =?null;
          Hashtable?files?=?null;

          if?(MultipartFormDataRequest.isMultipartFormData(request))
          {
          mrequest?
          =?new?MultipartFormDataRequest(request,null,100*1024*1024,MultipartFormDataRequest.COSPARSER,"GBK");//注意這里也要設(shè)置編碼參數(shù)
          String?sTt0?
          =?mrequest.getParameter("title");
          out.println("<br>Title0是:"+sTt0+"<br>");
          String?sTt1?=?new?String(sTt0.getBytes("ISO-8859-1"),"GBK");
          out.println("
          <br>Title1是:"+sTt1+"<br>");
          //這里用來測試title參數(shù)是否正確。調(diào)試的時候,加一句if?(true)return;即可。
          files?=?mrequest.getFiles();
          }


          //獲取修改前的文件名
          String?sOldFileName?=mrequest.getParameter("oldfilename");?
          out.println("sOldFileName:"+sOldFileName);
          String?sWebRootPath?=?request.getRealPath("/");//得到你的web應用的根。
          String?sPath=sWebRootPath+"attach";
          int?iFileCount?=?0;
          String?sServerFileName="";
          String?sLocalFileName?=?"";
          //文件獲取
          if?(?(files?!=?null)?||?(!files.isEmpty())?)?{

          iFileCount?=?files.size();
          UploadFile?file?=?(UploadFile)?files.get("attach");
          sLocalFileName=file.getFileName();
          out.println("sLocalFileName:"+sLocalFileName);
          int?ii=?sLocalFileName.indexOf(".");?//取文件名的后綴
          String?sExt?=?sLocalFileName.substring(ii,sLocalFileName.length());
          //得到不重復的文件名
          java.util.Date?dt?=?new?java.util.Date(System.currentTimeMillis());
          SimpleDateFormat?fmt?=?new?SimpleDateFormat("yyyyMMddHHmmssSSS");
          sServerFileName=?fmt.format(dt);
          sServerFileName?=sServerFileName?+?sExt;
          //如果不存在該目錄,則新建一個
          File?dir?=new?File(sPath);
          if?(!dir.exists()){
          dir.mkdirs();
          }
          upBean.setFolderstore(sPath);//設(shè)置要上傳的目錄
          upBean.addUploadListener(fileMover);//增加filMover監(jiān)聽
          fileMover.setNewfilename(sServerFileName);//設(shè)置服務器上的文件名
          upBean.store(mrequest,?"attach");//上傳
          out.println("file?path?is?"+sPath+"/"+sServerFileName);
          }

          %>


          Demo注意事項:cos.jar,uploadbean.jar,filemover.jar這幾個包必須有。
          必備下載地址:
          UploadBean1.5:http://wcarchive.cdrom.com/pub/simtelnet/winnt/java/uploadbean1_5.zip
          FileMover1.3:http://www.javazoom.net/jzservlets/uploadbean/addons/filemover1.3.zip
          參考下載地址:
          ChinesUpload例子:http://www.javazoom.net/jzservlets/uploadbean/addons/ChineseUpload.zip
          參考了fbysss的一篇文章
          2. org.apache.struts.upload.FormFile
          Struts1.1的org.apache.struts.upload.FormFile類。很方便,不用自己寫。也不用寫一個jsp調(diào)用jspsmartupload就可以搞定。


          選擇上傳文件頁面:selfile.jsp


          --------------------------------------------------------------------------------
          <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
          <html:html>
          <html:form action="/uploadsAction.do" enctype="multipart/form-data">
          <html:file property="theFile"/>
          <html:submit/>
          </html:form>
          </html:html>

          --------------------------------------------------------------------------------
          UpLoadAction.java
          --------------------------------------------------------------------------------
          import?java.io.*;
          import?javax.servlet.http.*;
          import?org.apache.struts.action.*;
          import?org.apache.struts.upload.FormFile;

          /**
          *?<p>Title:UpLoadAction</p>
          *?<p>Description:?QRRSMMS?</p>
          *?<p>Copyright:?Copyright?(c)?2004?jiahansoft</p>
          *?<p>Company:?jiahansoft</p>
          *?
          @author?wanghw
          *?
          @version?1.0
          */


          public?class?UpLoadAction?extends?Action?{
          public?ActionForward?execute(ActionMapping?mapping,
          ActionForm?form,
          HttpServletRequest?request,
          HttpServletResponse?response)
          throws?Exception?{
          if?(form?instanceof?uploadsForm)?{//如果form是uploadsForm
          String?encoding?=?request.getCharacterEncoding();
          if?((encoding?!=?null)?&&?(encoding.equalsIgnoreCase("utf-8")))
          {
          response.setContentType(
          "text/html;?charset=gb2312");//如果沒有指定編碼,編碼格式為gb2312
          }

          UpLoadForm?theForm?
          =?(UpLoadForm?)?form;
          FormFile?file?
          =?theForm.getTheFile();//取得上傳的文件
          try?{
          InputStream?stream?
          =?file.getInputStream();//把文件讀入
          String?filePath?=?request.getRealPath("/");//取當前系統(tǒng)路徑
          ByteArrayOutputStream?baos?=?new?ByteArrayOutputStream();
          OutputStream?bos?
          =?new?FileOutputStream(filePath?+?"/"?+
          file.getFileName());
          //建立一個上傳文件的輸出流
          //System.out.println(filePath+"/"+file.getFileName());
          int?bytesRead?=?0;
          byte[]?buffer?=?new?byte[8192];
          while?(?(bytesRead?=?stream.read(buffer,?0,?8192))?!=?-1)?{
          bos.write(buffer,?
          0,?bytesRead);//將文件寫入服務器
          }

          bos.close();
          stream.close();
          }
          catch(Exception?e){
          System.err.print(e);
          }

          //request.setAttribute("dat",file.getFileName());
          return?mapping.findForward("display");
          }

          return?null;
          }

          }



          --------------------------------------------------------------------------------

          UpLoadForm.java

          --------------------------------------------------------------------------------


          import?javax.servlet.http.HttpServletRequest;
          import?org.apache.struts.action.*;
          import?org.apache.struts.upload.*;

          /**
          *?<p>Title:UpLoadForm</p>
          *?<p>Description:?QRRSMMS?</p>
          *?<p>Copyright:?Copyright?(c)?2004?jiahansoft</p>
          *?<p>Company:?jiahansoft</p>
          *?
          @author?wanghw
          *?
          @version?1.0
          */


          public?class?UpLoadForm?extends?ActionForm?{
          public?static?final?String?ERROR_PROPERTY_MAX_LENGTH_EXCEEDED?=?"org.apache.struts.webapp.upload.MaxLengthExceeded";
          protected?FormFile?theFile;
          public?FormFile?getTheFile()?{
          return?theFile;
          }

          public?void?setTheFile(FormFile?theFile)?{
          this.theFile?=?theFile;
          }

          public?ActionErrors?validate(ActionMapping?mapping,?HttpServletRequest?request)
          {
          ActionErrors?errors?
          =?null;
          //has?the?maximum?length?been?exceeded?
          Boolean?maxLengthExceeded?=?(Boolean)
          request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
          if?((maxLengthExceeded?!=?null)?&&?(maxLengthExceeded.booleanValue()))
          {
          errors?
          =?new?ActionErrors();
          errors.add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED,?
          new?ActionError("maxLengthExceeded"));
          }

          return?errors;

          }

          }

          //這是相對應的form,還有其他屬性可以設(shè)置,具體可以參考struts的上傳例子。



          --------------------------------------------------------------------------------

          struts-config.xml

          --------------------------------------------------------------------------------

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd";>
          <struts-config>
          <form-beans>
          <form-bean name="uploadsForm" type="UpLoadForm" />
          </form-beans>
          <action-mappings>
          <action name="uploadsForm" type="UpLoadAction" path="/uploadsAction">
          <forward name="display" path="/display.jsp" />
          </action>
          </action-mappings>
          </struts-config>
          <!--display.jsp就是隨便寫一個成功頁-->
          posted on 2007-03-26 22:18 Alex 閱讀(36124) 評論(7)  編輯  收藏 所屬分類: web技術(shù)

          評論

          # re: [zt]用JSP實現(xiàn)上傳文件的兩種方法 2007-06-04 13:46 zhuwdj
          謝謝老哥!  回復  更多評論
            

          # re: [zt]用JSP實現(xiàn)上傳文件的兩種方法[未登錄] 2007-06-04 13:48 nancy
          form instanceof uploadsForm
          應為
          form instanceof UpLoadForm
          那就完美了!  回復  更多評論
            

          # re: [zt]用JSP實現(xiàn)上傳文件的兩種方法[未登錄] 2011-11-10 20:05
          老哥,我是出學Jsp,能不能以后常向你請教?我的QQ 624987420  回復  更多評論
            

          # re: [zt]用JSP實現(xiàn)上傳文件的兩種方法 2012-06-11 13:01 dfdf
          dfsfsdfdsfsdfsd  回復  更多評論
            

          # re: [zt]用JSP實現(xiàn)上傳文件的兩種方法 2012-11-23 09:24 有課
          為什么我使用第一種方法,在mrequest = new MultipartFormDataRequest。。。處報錯了  回復  更多評論
            

          # re: [zt]用JSP實現(xiàn)上傳文件的兩種方法 2013-03-08 14:11 對方是否收費
          斯蒂芬斯蒂芬  回復  更多評論
            

          # re: [zt]用JSP實現(xiàn)上傳文件的兩種方法 2014-09-23 18:19 lennosay
          天啊,這種工具類不要自己寫,請用權(quán)威的 Apache Commons FileUpload
          官網(wǎng)網(wǎng)站:http://commons.apache.org/ (因為頁面不斷更新,所以請自己進入找)  回復  更多評論
            

          主站蜘蛛池模板: 西乌珠穆沁旗| 新乡市| 武威市| 含山县| 濮阳县| 沁水县| 巴塘县| 惠安县| 邵阳市| 临沭县| 河源市| 隆化县| 胶南市| 长葛市| 赤壁市| 莆田市| 张家港市| 石城县| 无锡市| 邯郸市| 镇巴县| 湘西| 湘阴县| 师宗县| 兴国县| 平遥县| 宝兴县| 玉山县| 车险| 宜君县| 兰西县| 南涧| 金乡县| 塔城市| 罗山县| 腾冲县| 阳泉市| 仙居县| 平潭县| 泸溪县| 沅陵县|