小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

文件上傳和下載的commons-fileupload-1.2的使用 - Aflyer 天與...

 不會游泳的魚 2007-06-15

網(wǎng)上看了很多樣例,但是有很多都是過時的,里面使用的包中的FileUpload類在新的1.2里面已經(jīng)改變,所以我們不能照搬原來的方法 ,除非你放棄使用新版本的jar包。

2.1  jsp方式上傳

upload.jsp

<%@ page language="java" %>

<%@ page contentType = "text/html;charset=gb2312"%>

<html>

<head>

<title>文件上傳演示</title>

</head>

<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="40" marginwidth="0" marginheight="0">

<center>

<h1>文件上傳演示</h1>

<form name="uploadform" method="POST" action="save.jsp" ENCTYPE="multipart/form-data">

<table border="1" width="450" cellpadding="4" cellspacing="2" bordercolor="#9BD7FF">

<tr><td width="100%" colspan="2">

文件1<input name="file1" size="40" type="file">

</td></tr>

<tr><td width="100%" colspan="2">

文件2<input name="file2" size="40" type="file">

</td></tr>

<tr><td width="100%" colspan="2">

文件3<input name="file3" size="40" type="file">

</td></tr>

</table>

<br/><br/>

<table>

<tr><td align="center"><input type="submit" name="submit" value="開始上傳"/></td></tr>

</table>

</form>

</center>

</body>

</html>

 

該文件唯一要注意的地方就是紅色粗體的地方,其他的沒有什么區(qū)別。而正是在這個奇怪的參數(shù)上,我們利用servlet處理表單的時候就帶來了一個特殊的處理方式(見后分析);

 

save.jsp

 

<%@ page language="java" contentType="text/html;charset=GBK"%>

<%@ page import="java.util.*"%>

<%@ page import="java.io.*"%>

<%@ page import="org.apache.commons.fileupload.*"%>

<html>

<head>

<title>保存上傳文件</title>

</head>

<body bgcolor=‘#FFFFFF‘ text=‘#000000‘ leftmargin=‘0‘ topmargin=‘40‘ marginwidth=‘0‘ marginheight=‘0‘>

<font size=‘6‘ color=‘blue‘>文件列表:</font>

<center>

<table cellpadding=0 cellspacing=1 border=1 width=‘100%‘>

<tr>

<td bgcolor=#008080>文件名</td>

<td bgcolor=#008080>大小</td>

</tr>

<%

    String msg = "";

    DiskFileUpload fu = new DiskFileUpload();

// 設置允許用戶上傳文件大小,單位:字節(jié)

// fu.setSizeMax(10000000);

// 設置最多只允許在內(nèi)存中存儲的數(shù)據(jù),單位:字節(jié)

// fu.setSizeThreshold(4096);

// 設置一旦文件大小超過getSizeThreshold()的值時數(shù)據(jù)存放在硬盤的目錄

    //(臨時存放目錄,文件上傳完畢后有辦法清除它嗎?)

    fu.setRepositoryPath("D:\\TEMP");

    //開始讀取上傳信息

    List fileItems = fu.parseRequest(request);

    // 依次處理每個上傳的文件

    Iterator iter = fileItems.iterator();

    while (iter.hasNext())

    {

      FileItem item = (FileItem) iter.next();

      //忽略其他不是文件域的所有表單信息

      if (!item.isFormField())

      {

        String name = item.getName();//獲取上傳的文件名

        long size = item.getSize();//獲取上傳的文件大小(字節(jié)為單位)

        if((name==null||name.equals("")) && size==0)

        continue;//跳到while檢查條件

        out.println("<tr>");

        out.println("<td>" + name + "</td>");

        out.println("<td>" + size + "</td>");

        //以下為文件名處理,將上傳的文件保存在項目所在目錄下。

        //獲取文件名字符串的長度

        int end = name.length();

        //返回在此字符串中最右邊出現(xiàn)的指定子字符串的索引。

        int begin = name.lastIndexOf("\\");

        File savedFile = new File("c:\\TEMP", name.substring(begin+1,end));

        item.write(savedFile);

      }

    }

%>

</table>

<br><br>

<a href="upload.jsp">返回上傳頁面</a>

</center>

</body>

</html>

 

以上兩個文件均是來自網(wǎng)上,我已經(jīng)做了局部修改。

 

2. SERVLET的處理

前面提到了那個特殊的form 參數(shù)ENCTYPE="multipart/form-data",我在做servlet的時候用通常的request.getParameter("id"),無法捕捉到該form 表單的值。我們要特殊處理這個表單。

以下截取的部分servlet內(nèi)容:

假設 我的form里面有 id,serid,adjunctname 3name,而adjunctnametypefile的,其他的是text的。

              String id = ChineseString.chineseStr(request.getParameter("id"));

              String serid = ChineseString.chineseStr(request.getParameter("serid"));

              String adjunctname = ChineseString.chineseStr(request

                            .getParameter("adjunctname"));

                           

              String oldFile = ChineseString.chineseStr(request

                            .getParameter("oldFile"));

              String downLoadFile = ChineseString.chineseStr(request

                            .getParameter("downLoadFile"));

              if (ServletFileUpload.isMultipartContent(request)) {

                     // Create a factory for disk-based file items

                     DiskFileItemFactory factory = new DiskFileItemFactory();

                     // Set factory constraints

                     factory.setSizeThreshold(20 * 1024);

                     factory.setRepository(factory.getRepository());

                     // Create a new file upload handler

                     ServletFileUpload upload = new ServletFileUpload(factory);

                     // Set overall request size constraint

                     upload.setFileSizeMax(20 * 1024 * 1024);

                     List formlists = null;

                     try {

                            formlists = upload.parseRequest(request);

                     } catch (FileUploadException e1) {

                            // TODO Auto-generated catch block

                            e1.printStackTrace();

                     }

                     Iterator iter = formlists.iterator();

                     while (iter.hasNext()) {

                            FileItem formitem = (FileItem) iter.next();

                            if (!formitem.isFormField()) {

                                   String name = ChineseString.chineseStr(formitem.getName());

                                   adjunctsize = new Long(formitem.getSize()).toString();

                                   if ((name == null || name.equals(""))

                                                 && adjunctsize.equals("0"))

                                          continue;

                                   // 獲取純粹的文件名

                                   adjunctname = name.substring(name.lastIndexOf("\\") + 1);

                                   String suffixName = "."

                                                 + adjunctname.substring(adjunctname

                                                               .lastIndexOf(".") + 1);

                                   newadjunctname = new Long(GetTime.getSystemCalendar())

                                                 .toString()

                                                 + suffixName;

                                   // 創(chuàng)建文件

                                   File savefile = new File(IConstant.ADJUNTFILEPATH

                                                 + newadjunctname);

                                   // File savefile=new File("c:\\TEMP" + newadjunctname);

                                   // 寫入文件

                                   try {

                                          formitem.write(savefile);

                                   } catch (Exception e) {

                                          // TODO Auto-generated catch block

                                          e.printStackTrace();

                                   }

                            }else{

                                   String formname=formitem.getFieldName();//獲取form中的名字

                                   String formcontent=formitem.getString();

                                   formname=new String(formname.getBytes(),"gb2312");

                                   formcontent=new String(formcontent.getBytes(),"gb2312");

                                   if (formname.equals("id")){

                                          id = formcontent;

                                   }else if(formname.equals("serid")){

                                          serid = formcontent;

                                   }

                            }

                     }

              }

當我提交頁面時得到的id serid 均是空的,于是做了這樣的一個處理

if (!formitem.isFormField())

判斷是否是文件域,如果不是轉(zhuǎn)向文本域處理

String formname=formitem.getFieldName();//獲取form中的名字

                                   String formcontent=formitem.getString();

                                   formname=new String(formname.getBytes(),"gb2312");

                                   formcontent=new String(formcontent.getBytes(),"gb2312");

                                   if (formname.equals("id")){

                                          id = formcontent;

                                   }else if(formname.equals("serid")){

                                          serid = formcontent;

                                   }

這樣才能得到正確的form idserid的值

 3. 文件名稱或路徑亂碼的處理

servelet的處理代碼里面,我們看見了一些字符編碼的轉(zhuǎn)換,如:

aString downLoadFile = ChineseString.chineseStr(request

                            .getParameter("downLoadFile"));

       bformname=new String(formname.getBytes(),"gb2312");

ChineseString.chineseStr 是自己做的一個公共的轉(zhuǎn)換函數(shù),內(nèi)容如下:

       public static String chineseStr(String str) {

              try {

                     if (str == null)

                            return "";

                     String tempStr = str;

                     byte[] tempArray = tempStr.getBytes("ISO8859-1");

                     String temp = new String(tempArray);

                     return temp;

              } catch (Exception ex) {

                     System.out

                                   .println("Exception : com.sclh.common.ChineseString/chineseStr() "

                                                 + ex.getMessage());

              }

              return "";

       }

4. 下載頁面

有了上傳頁面,我們在添加一個下載的頁面:

<%@ page contentType="text/html;charset=gb2312" language="java" %>

<%@ page import="java.io.*"%>

<%@ page import="com.sclh.rsp.servicecenter.commom.*"%>

<%@ include file="../common.jsp"%>

<%

String downLoadFile = IConstant.ADJUNTFILEPATH+ChineseString.nullToStr(request.getParameter("downLoadFile"));

String oldFile = request.getParameter("oldFile");

//oldFile=oldFile.replaceAll(";", "");

if((oldFile.length())>50){

 oldFile=oldFile.substring(0,20);

}

if (!"".equals(downLoadFile)) {

       String fullFileName = downLoadFile;

       File file = new File(fullFileName);

       if (file.exists()) {

          try {

              FileInputStream fileContext = new FileInputStream(fullFileName);

              BufferedInputStream inStream = new BufferedInputStream(fileContext);

                 response.reset();

              response.setContentType("application/x-msdownload");

                 oldFile = java.net.URLEncoder.encode(oldFile, "utf-8");

                 response.setHeader("Content-Disposition", "attachment; filename="+ oldFile);

//               response.setHeader("content-encoding","gzip");

//         response.setHeader("content-encoding","compress");

              OutputStream sOut = response.getOutputStream();

              byte[] b = new byte[4096];

              int len = 0;

              while ( (len = inStream.read(b)) != -1) {

                    sOut.write(b, 0, len);

                    }

           sOut.close();

                 }

          catch (IOException ex) {

           //System.out.println("Exception : downLoad.jsp " + ex.getMessage());

                 }

       }

       else {

         response.sendRedirect("error.jsp?closeFlag=1&message=" + ChineseString.URLEncode("下載的文件不存在!"));

       }

}

else {

    response.sendRedirect("error.jsp?closeFlag=1&message=" + ChineseString.URLEncode("下載文件時參數(shù)錯誤!"));

}%>

這個文件中的oldFile downLoadFile 就是為了解決下載亂碼和下載文件名稱而做的參數(shù)。如果缺少oldFile的處理 文件將會顯示的下載名稱為DownLoad.jsp。

IConstant.ADJUNTFILEPATH 變量定義的是附件存放的地方,在使用中定義

 以下是還涉及到下載頁面的部分jsp代碼:

        <td class="listcontent" width="17%" height="24" valign="middle" align="center"><a class=listlink  href="javascript:onclick=confirmDel(‘<%=entity[i].getId()%>‘,‘<%=intPage%>‘)">刪除</a>|<a class=listlink href="#" onClick="location.href=‘/AdjunctDataServlet?id=<%=entity[i].getId()%>&page=<%=intPage%>&action=update‘">修改</a>|<a class=listlink href="javascript:onclick=downfile(‘<%=entity[i].getAdjunctname()%>‘,‘<%=entity[i].getNewadjunctname()%>‘)">下載</a></td>

function downfile(oldFile,downLoadFile) {

       location.href="/AdjunctDataServlet?action=downLoadFile&oldFile="+oldFile+"&downLoadFile="+downLoadFile;

}

 

 

 

 

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1593398

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約