久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

java實(shí)現(xiàn)大文件的上傳

 中毒的蘋果 2006-07-24


最近項(xiàng)目經(jīng)理逼著讓偶做樹的展開,表嵌套表,可惜偶剛參加工作,水平低,這不在查資料嘛,可是不多久就傳來了經(jīng)理的叫囂聲,這么簡單的東西,都一天了,你還沒做完..................,哎真是郁悶,誰讓咱水平低呢(心想,什么時(shí)候等我水平提高了,看我怎么收拾你,又一想,等我水平提高了,人家早不知道干什么去了,廢話不多說了)

文件上傳一直是B/S結(jié)構(gòu)中很重要的一項(xiàng)功能,在java中并沒有很好的實(shí)現(xiàn)文件上傳的類包,因此出現(xiàn)了一些開源的組件,Smartupload ,commons-fileupload,還有國內(nèi)的一個(gè)"牛人"的(不好意思叫不上名字來),這幾個(gè)組件中Smartupload 出來的時(shí)候應(yīng)該最早,不過現(xiàn)在已經(jīng)不再有新的版本出現(xiàn),還有一個(gè)不足的地方就是Smartupload 支持上傳的文件最大在100M左右,這可滿足不了客戶的需求,聽說commons-fileupload不錯(cuò),經(jīng)過幾番測試終于搞定,下面是代碼,3個(gè)jsp文件 upload.jsp success.jsp error.jsp 一個(gè)action類

upload.jsp如下:

<%@ page language="java" contentType="text/html;charset=GBK"%>
<%@ page import="java.util.*" %>
<%@ page import="org.apache.commons.fileupload.*"%>

<%@ include file="/basic/include/headerjsf1.jsp" %>

<%pageContext.setAttribute("jsp.tags.reuse", new Boolean(false));%>
<A:navigation/>
<hr>
<center><b><font size=+1><bean:message key="upload.name"/></font></b></center>
<html>
<head>
 <title>????</title>
</head>
<body>

<form action="/budget3/FileUploadAction.do" name="one" enctype="multipart/form-data" method="post">

<p align="center">文件上傳
  <input type="File" name="fileupload" value="upload" />
  <input type="submit" value="上傳">
  <input type="reset" value="取消">
  </p>
</form>
</body>
</html>

很簡單,在選擇上傳文件后,此頁面會(huì)轉(zhuǎn)向FileUploadAction.do,這個(gè)類負(fù)責(zé)完成文件的上傳功能,具體代碼如下:

package com.atools.budget.TestTree.action;

import  com.atools.ggcw.action.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.commons.fileupload.*;
import org.apache.commons.io.*;
import java.io.*;
import java.util.*;
/**
 * @author hh
 *
 */
public class FileUploadAction extends BaseAction {
 public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response )
 {
  ActionForward forward=null;
  try
  {
 
   System.out.println("start");
   DiskFileUpload upload=new DiskFileUpload();
   List uploadlist=upload.parseRequest(request);
//   System.out.println("list  is "+uploadlist);
   Iterator iter=uploadlist.iterator();
   while(iter.hasNext())
   {
    FileItem  item=(FileItem)iter.next();
    if(!item.isFormField())
    {
     String filename=item.getName();
     filename=FilenameUtils.getName(filename);
     if(!filename.equals(""))
     {
      System.out.println("start"+filename);
      String savepath="D:\\temp\\"+filename;
      System.out.println("savepath is "+savepath);
      File saveFilepath=new File(savepath);
      item.write(saveFilepath);
      forward=mapping.findForward("success");
     }else
      forward=mapping.findForward("error");
    
    }
   }
  
  }catch(Exception ex)
  {
   ex.printStackTrace();
   System.out.println("程序發(fā)生錯(cuò)誤,,拋出異常為 "+ex.getMessage());
  }
 
  return forward;
 }
}
兩個(gè)轉(zhuǎn)向頁面success.jsp和error.jsp很簡單,這里就不寫了.作者測試了一下上傳200M的文件很快就完成了,而Smartupload 的根本實(shí)現(xiàn)不了200M左右文件的上傳

在筆者查資料的時(shí)候,發(fā)現(xiàn)很多都是這樣寫的

<%@ page language=“java”contentType=“text/html;charset=GBK”%>
<%@ page import=“java.util.*”%>
<%@ page import=“org.apache.commons.fileupload.*”%>
<html>
<head>
<title>文件上傳</title>
</head>
<%
 DiskFileUpload fu = new DiskFileUpload();
 // 設(shè)置允許用戶上傳文件大小,單位:字節(jié)
 fu.setSizeMax(10000000);
 // 設(shè)置最多只允許在內(nèi)存中存儲(chǔ)的數(shù)據(jù),單位:字節(jié)
 fu.setSizeThreshold(4096);
 // 設(shè)置一旦文件大小超過getSizeThreshold()的值時(shí)數(shù)據(jù)存放在硬盤的目錄
 fu.setRepositoryPath(“D:\\Tomcat5\\TEMP”);
 //開始讀取上傳信息
 List fileItems = fu.parseRequest(request);
 // 依次處理每個(gè)上傳的文件
 Iterator iter = fileItems.iterator();
 while (iter.hasNext()) {
  FileItem item = (FileItem) iter.next();
  //忽略其他不是文件域的所有表單信息
  if (!item.isFormField()) {
   String name = item.getName();
   item.write(“D:\\UploadTest\\”+ name);
 }
}
%>

其中直接得到文件名 item.getName();

然后將其寫入item.write(“D:\\UploadTest\\”+ name);是不對(duì)的,因?yàn)閕tem.getName()得到的文件名是包括上傳路徑的,比如E:\work.doc,在寫入的時(shí)候D:\\UploadTest\+E:\work.doc肯定是不對(duì)的,還有一點(diǎn)實(shí)例item的write()方法要求傳入的參數(shù)為File類的實(shí)例.

以上用到的兩個(gè)jar包可以到 1:commons-fileupload  http://jakarta./site/downloads/downloads_commons-fileupload.cgi

2:Commons-IO  http://jakarta./commons/io/ 去下載.

里面有很多東西還在琢磨,有知道的朋友也可以交流

 


 

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多