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

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

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

          摘錄如下:


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

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

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

          cos.jar + uploadbean.jar + filemover.jar
          這個(gè)是用的非常普遍的,原因是因?yàn)樗僮鞣奖?是我們不必再去關(guān)注,那些文件的輸入和輸出流,使我們從底層的流中解脫出來(lái).
          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.讀取表單頁(yè)面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>
          ");
          //這里用來(lái)測(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)聽(tīng)
          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類(lèi)。很方便,不用自己寫(xiě)。也不用寫(xiě)一個(gè)jsp調(diào)用jspsmartupload就可以搞定。


          選擇上傳文件頁(yè)面: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");//如果沒(méi)有指定編碼,編碼格式為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);//將文件寫(xiě)入服務(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就是隨便寫(xiě)一個(gè)成功頁(yè)-->

          posted on 2013-01-22 17:27 youngturk 閱讀(760) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 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 口語(yǔ)英語(yǔ)

          常用鏈接

          留言簿(6)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          相冊(cè)

          EJB學(xué)習(xí)

          Flex學(xué)習(xí)

          learn English

          oracle

          spring MVC web service

          SQL

          Struts

          生活保健

          解析文件

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 辽源市| 郸城县| 嘉善县| 庆阳市| 鄂温| 伊通| 绵阳市| 青冈县| 乌兰察布市| 交城县| 博罗县| 贡山| 丰宁| 大港区| 嘉荫县| 邵武市| 金门县| 苍南县| 文化| 介休市| 滨海县| 吉安市| 灌云县| 顺义区| 定西市| 康定县| 大石桥市| 蒲城县| 五指山市| 上蔡县| 巴里| 碌曲县| 鄄城县| 密云县| 黄石市| 尖扎县| 东台市| 桂东县| 康定县| 桑日县| 南郑县|