用JSP實(shí)現(xiàn)上傳文件的兩種方法

          key words: 文件上傳,upload, cos.jar + uploadbean.jar + filemover.jar

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

          摘錄如下:


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

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

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

          cos.jar + uploadbean.jar + filemover.jar
          這個(gè)是用的非常普遍的,原因是因?yàn)樗僮鞣奖?是我們不必再去關(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上傳實(shí)例
          //功能:解決中文亂碼,完成文件上傳,并提供上傳改名解決方案
          //作者: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è)置編碼格式,就不用一個(gè)個(gè)轉(zhuǎn)碼了。
          FileMover fileMover 
          = new 
          FileMover();//你也可以使用自帶的實(shí)例中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>
          ");
          //這里用來測(cè)試title參數(shù)是否正確。調(diào)試的時(shí)候,加一句if (true)return;即可。
          files = mrequest.getFiles();
          }


          //獲取修改前的文件名
          String sOldFileName =mrequest.getParameter("oldfilename"); 
          out.println("sOldFileName:"+sOldFileName);
          String sWebRootPath = request.getRealPath("/");//得到你的web應(yīng)用的根。
          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());
          //得到不重復(fù)的文件名
          java.util.Date dt = new java.util.Date(System.currentTimeMillis());
          SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS");
          sServerFileName= fmt.format(dt);
          sServerFileName =sServerFileName + sExt;
          //如果不存在該目錄,則新建一個(gè)
          File dir =new File(sPath);
          if (!dir.exists()){
          dir.mkdirs();
          }
          upBean.setFolderstore(sPath);//設(shè)置要上傳的目錄
          upBean.addUploadListener(fileMover);//增加filMover監(jiān)聽
          fileMover.setNewfilename(sServerFileName);//設(shè)置服務(wù)器上的文件名
          upBean.store(mrequest, "attach");//上傳
          out.println("file path is "+sPath+"/"+sServerFileName);
          }

          %>


          Demo注意事項(xiàng):cos.jar,uploadbean.jar,filemover.jar這幾個(gè)包必須有。
          必備下載地址:
          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類。很方便,不用自己寫。也不用寫一個(gè)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("/");//取當(dāng)前系統(tǒng)路徑
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          OutputStream bos 
          = new FileOutputStream(filePath + "/" +

          file.getFileName());
          //建立一個(gè)上傳文件的輸出流
          //System.out.println(filePath+"/"+file.getFileName());

          int bytesRead = 0;
          byte[] buffer = new byte[8192
          ];
          while ( (bytesRead = stream.read(buffer, 08192)) != -1
          {
          bos.write(buffer, 
          0, bytesRead);//將文件寫入服務(wù)器

          }

          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;

          }

          }

          //這是相對(duì)應(yīng)的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就是隨便寫一個(gè)成功頁-->

          posted on 2013-01-22 17:27 youngturk 閱讀(766) 評(píng)論(0)  編輯  收藏 所屬分類: JSP隨筆 、Java基礎(chǔ) 、struts2

          <2013年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          this year :
          1 jQuery
          2 freemarker
          3 框架結(jié)構(gòu)
          4 口語英語

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          EJB學(xué)習(xí)

          Flex學(xué)習(xí)

          learn English

          oracle

          spring MVC web service

          SQL

          Struts

          生活保健

          解析文件

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 四川省| 庆阳市| 台州市| 色达县| 余江县| 汉沽区| 克拉玛依市| 澳门| 绥棱县| 报价| 兰考县| 南宁市| 齐齐哈尔市| 广宁县| 习水县| 隆昌县| 栾城县| 文水县| 汾西县| 苗栗县| 平安县| 西贡区| 曲水县| 焉耆| 阿荣旗| 天峻县| 宕昌县| 灵武市| 汉源县| 罗田县| 霍山县| 海晏县| 定南县| 牟定县| 张家港市| 陇西县| 南陵县| 泰和县| 吴堡县| 墨江| 深州市|