用JSP實現上傳文件的兩種方法

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

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

          摘錄如下:


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

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

          現在在國內用的非常多的一般是兩種方法解決來解決文件上傳.

          cos.jar + uploadbean.jar + filemover.jar
          這個是用的非常普遍的,原因是因為他操作方便,是我們不必再去關注,那些文件的輸入和輸出流,使我們從底層的流中解脫出來.
          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");//設置編碼格式,就不用一個個轉碼了。
          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");//注意這里也要設置編碼參數
          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參數是否正確。調試的時候,加一句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);//設置要上傳的目錄
          upBean.addUploadListener(fileMover);//增加filMover監聽
          fileMover.setNewfilename(sServerFileName);//設置服務器上的文件名
          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調用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("/");//取當前系統路徑
          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, 08192)) != -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,還有其他屬性可以設置,具體可以參考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 2013-01-22 17:27 youngturk 閱讀(760) 評論(0)  編輯  收藏 所屬分類: JSP隨筆Java基礎struts2

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

          導航

          統計

          公告

          this year :
          1 jQuery
          2 freemarker
          3 框架結構
          4 口語英語

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          EJB學習

          Flex學習

          learn English

          oracle

          spring MVC web service

          SQL

          Struts

          生活保健

          解析文件

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 郁南县| 十堰市| 凌海市| 类乌齐县| 乐平市| 广安市| 乐业县| 鞍山市| 容城县| 青州市| 普定县| 华池县| 清丰县| 习水县| 卓资县| 宿松县| 华容县| 九寨沟县| 斗六市| 杭锦后旗| 桦川县| 汶川县| 白朗县| 略阳县| 侯马市| 尚志市| 固镇县| 肇州县| 平山县| 镶黄旗| 扬州市| 鄂托克前旗| 嘉兴市| 肇州县| 酒泉市| 宜丰县| 临夏市| 南靖县| 庆阳市| 巍山| 全州县|