从SmartUpload到FileUpload的无缝转移
2009-10-30 00:00:00 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佺粯鍔﹂崜娆撳礉閵堝洨纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯閻忓繑鐗楃€氫粙姊虹拠鏌ュ弰婵炰匠鍕彾濠电姴浼i敐澶樻晩闁告挆鍜冪床闂備浇顕栭崹搴ㄥ礃閿濆棗鐦遍梻鍌欒兌椤㈠﹤鈻嶉弴銏犵闁搞儺鍓欓悘鎶芥煛閸愩劎澧曠紒鈧崘鈹夸簻闊洤娴烽ˇ锕€霉濠婂牏鐣洪柡灞诲妼閳规垿宕卞▎蹇撴瘓缂傚倷闄嶉崝搴e垝椤栫偛桅闁告洦鍨扮粻鎶芥倵閿濆簼绨藉ù鐘荤畺濮婃椽妫冨☉娆愭倷闁诲孩鐭崡鎶芥偘椤曗偓瀹曞爼顢楁径瀣珫婵犳鍣徊鍓р偓绗涘洤绠查柛銉墮閽冪喖鏌i弬鎸庢喐闁荤喎缍婇弻娑⑩€﹂幋婵囩亪濡炪値鍓欓悧鍡涒€旈崘顔嘉ч幖绮光偓鑼嚬缂傚倷绶¢崰妤呭箰閹间焦鍋╅柣鎴f绾偓闂佺粯鍔曠粔闈浳涢崘顔兼槬闁逞屽墯閵囧嫰骞掗幋婵愪紑閻庤鎸风粈渚€鍩為幋锔藉亹闁圭粯甯╂导鈧紓浣瑰劤瑜扮偟鍒掑▎鎾宠摕婵炴垶鐭▽顏堟煙鐟欏嫬濮囨い銉︾箞濮婃椽鏌呴悙鑼跺濠⒀傚嵆閺岀喖鎼归锝呯3闂佹寧绻勯崑娑㈠煘閹寸姭鍋撻敐搴樺亾椤撴稒娅婇柡灞界У濞碱亪骞忕仦钘夊腐闂備焦鐪归崐鏇㈠箠閹邦喗顫曢柟鎯х摠婵挳鏌涢幘鏉戠祷闁告挸宕—鍐Χ閸℃浠搁梺鑽ゅ暱閺呮盯鎮鹃悜钘壩ㄧ憸澶愬磻閹剧粯鏅查幖绮瑰墲閻忓秹姊虹紒妯诲鞍婵炲弶锕㈡俊鐢稿礋椤栨氨鐤€闂傚倸鐗婄粙鎰姳閼测晝纾藉ù锝堟閻撴劖鎱ㄥΟ绋垮婵″弶鍔欓獮妯兼嫚閼碱剦妲伴梻浣稿暱閹碱偊宕愭繝姣稿洭寮舵惔鎾存杸濡炪倖姊婚妴瀣啅閵夛负浜滄い鎾跺仜濡插鏌i敐鍥у幋妤犵偞甯¢獮瀣籍閳ь剟鎮楁繝姘拺閻熸瑥瀚崕妤呮煕濡 鍋撻悢鎻掑緧婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繑銇勯幘鍗炵仼缁炬儳顭烽弻鐔煎礈瑜忕敮娑㈡煃闁垮鐏﹂柕鍥у楠炴帡宕卞鎯ь棜缂傚倸鍊风粈渚€藝闁秴鏋佸┑鐘虫皑瀹撲線鏌涢埄鍐姇闁稿﹦鍏橀弻娑樷攽閸℃浼€濡炪倖姊归崝鏇㈠煘閹达附鍊婚柛銉㈡櫇鏍¢梻浣告啞閹稿鎮烽敂鐣屸攳濠电姴娲﹂崵鍐煃閸濆嫬鏆熼柨娑欑矒濮婇缚銇愰幒鎴滃枈闂佸憡鐟ユ鎼佸煝閹炬枼鍫柛顐ゅ枔閸樻悂鏌h箛鏇炰户缁绢厼鐖煎畷鎴﹀箻鐠囪尙鐤€婵炶揪绲介幉锟犲磹椤栫偞鈷戠痪顓炴噹娴滃綊鎮跺☉鏍у姦闁糕斁鍋撳銈嗗笒閸燁偊鎯冨ú顏呯厸濞达絽婀辨晶顏堟煃鐟欏嫬鐏撮柟顔界懇瀵爼骞嬮悩杈敇闂傚倷绀佸﹢杈ㄧ仚闂佺濮ょ划搴ㄥ礆閹烘绫嶉柛顐ゅ枎娴犺櫣绱撴担鍓插創妞ゆ洘濞婇弫鍐磼濞戞艾骞堥梻浣告惈濞层垽宕濆畝鍕€堕柣妯肩帛閻撴洟鏌熼懜顒€濡煎ù婊勫劤閳规垿鏁嶉崟顐℃澀闂佺ǹ锕ラ悧鐘茬暦濠靛鏅濋柍褜鍓熼垾锕傚锤濡も偓閻掑灚銇勯幒宥堝厡缂佺姴澧介埀顒€鍘滈崑鎾斥攽閻樿京绐旈柛瀣殔閳规垿顢欑涵鐑界反濠电偛鎷戠徊鍨i幇鏉跨闁瑰啿纾崰鎾诲箯閻樼粯鍤戦柤绋跨仛濮f劙姊婚崒姘偓鐑芥嚄閼哥數浠氭繝鐢靛仜椤曨參宕楀Ο渚殨妞ゆ劑鍊栫€氭氨鈧懓澹婇崰鏍р枔閵婏妇绡€闁汇垽娼ф牎缂佺偓婢樼粔鐟邦嚕閺屻儱绠甸柟鐑樼箘閸炵敻鏌i悩鐑橆仩閻忓繈鍔岄蹇涘Ψ瑜夐崑鎾舵喆閸曨剙纰嶅┑鈽嗗亝缁诲倿锝炶箛娑欐優闁革富鍘鹃敍婊冣攽閳藉棗鐏犻柟纰卞亰閿濈偛顓奸崶鈺冿紳婵炶揪缍侀ˉ鎾诲礉瀹ュ鐓欑紒瀣仢閺嗛亶鏌i敐鍥у幋妤犵偛顑夐弫鍐焵椤掑倻涓嶅┑鐘崇閸嬶綁鏌涢妷鎴濆暟妤犲洭鎮楃憴鍕碍缂佸鎸抽垾鏃堝礃椤斿槈褔鏌涢埄鍏狀亪妫勫鍥╃=濞达絽澹婇崕鎰版煕閵娿儱顣崇紒顔碱儏椤撳吋寰勭€n亖鍋撻柨瀣ㄤ簻闁瑰搫绉堕ˇ锔锯偓娈垮枛閻忔繈鍩為幋锕€鐓¢柛鈩冾殘娴狀垶姊洪崨濠庣劶闁告洦鍙庡ú鍛婁繆閵堝繒鍒伴柛鐕佸灦瀹曟劙宕归锝呭伎濠碘槅鍨抽崢褎绂嶆ィ鍐╁€垫慨妯煎亾鐎氾拷

在修改项目时,发现以前的jsp项目,附件上传用的是SmartUpload,系统中多处都用的是这这种方式上传,这种上传附件的机制大小只能传十兆左右,
而客户现在要求,至少50M,所以原有的SmartUpload不能满足需求,所以打算用Fileupload来实现附件上传功能。但如果换FileUpload,则系统代码改动量很大,大概有50于处地方都需要修改,遂放弃,直接修改代码的想法。
于是,看了一些代码后,自己写了一个从SmartUload到FileUpload转接的中间件程序,可实现不用修改原有SmartUpload上传的代码。
原上传的主要代码见下面:
Java代码
SmartUpload objUpload = new SmartUpload(pageContext);
///主要代码
if(objUpload.getCount()>0)
{
for(int i=1;i<=objUpload.getCount();i++){
ps.setString(9,objUpload.getUgetContentType(i));
ps.setString(10,objUpload.getUFileName(i));
ps.setBinaryStream(11,objUpload.getUFileInputStream(i), objUpload.getFLength(i));//Content
}
}
我写的中间件类,类名也叫SmartUpload,但用的是Fileupload上传的机制:
Java代码
package gui;
import java.io.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.servlet.*;
import org.apache.commons.fileupload.disk.*;
// Referenced classes of package gui:
// SmartFiles, SmartRequest, SmartUploadException, SmartFile
public class SmartUpload
{
protected Hashtable parameters;//保存普通form表单域
protected Hashtable files;//保存上传的文件
private int sizeThreshold = 4096;
public int maxflag=0;
private long filemaxsize=100*1024*1024; //默认100MB
protected HttpServletRequest m_request;
protected HttpServletResponse m_response;
protected ServletContext m_application;
private PageContext page;
private String pencoding;
public SmartUpload()
{
}
//构造方法 参数一 pagecontex 参数二 一般为GBK 参数三 上传的最大文件 单位MB
public SmartUpload(PageContext pagecontext,String encoding,long filesize)
throws ServletException, IOException,FileUploadException
{
page=null;
page=pagecontext;
m_request=(HttpServletRequest)page.getRequest();
m_response=(HttpServletResponse)page.getResponse();
if(encoding==null||"".equals(encoding)) encoding="GBK";
this.pencoding=encoding;
if(filesize<3) filesize=100;
System.out.println("fileupload版本号:sun2009101303. 最大上传:"+filesize+"Mb");
this.filemaxsize=filesize*1024*1024;
pageinit(m_request);
}
// 构造方法 参数一 pagecontex 参数二 上传的最大文件 单位MB
public SmartUpload(PageContext pagecontext,long filesize)
throws ServletException, IOException,FileUploadException
{
this(pagecontext,"GBK",filesize);
}
// 构造方法 参数一 pagecontex 参数二 编码格式
public SmartUpload(PageContext pagecontext,String encode)
throws ServletException, IOException,FileUploadException
{
this(pagecontext,encode,100);
}
// 构造方法 参数一 pagecontex 默认GBK 默认大小100MB
public SmartUpload(PageContext pagecontext)
throws ServletException, IOException,FileUploadException
{
this(pagecontext,"GBK",100);
}
public void pageinit(HttpServletRequest request) throws FileUploadException
{
int filecount=0; //附件个数
parameters = new Hashtable();
files = new Hashtable();
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(sizeThreshold);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding(this.pencoding);
upload.setFileSizeMax(filemaxsize);
try {
List items = upload.parseRequest(request);
Iterator iterator = items.iterator();
while(iterator.hasNext()){
FileItem item = (FileItem)iterator.next();
if(item.isFormField()){
String fieldName = item.getFieldName();
String value = item.getString();
//----------
if(parameters.containsKey(fieldName))
{
Hashtable hashtable = (Hashtable)parameters.get(fieldName);
hashtable.put(new Integer(hashtable.size()), value);
} else
{
Hashtable hashtable1 = new Hashtable();
hashtable1.put(new Integer(0), value);
parameters.put(fieldName, hashtable1);
}
//------------
}else{
//去除掉空的。没选择文件的file。
if(item.getSize()>filemaxsize)
{
maxflag=1;
System.out.println("文件过大="+item.getSize()+";最大值为="+filemaxsize/1024/1024+"MB");
}
if(item.getName()!=null&&!"".equals(item.getName()))
{
filecount=filecount+1;
files.put(filecount+"", item);
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
/**取得表单元素值。**/
public String getParameter(String s)
{
return this.getParameter(s,this.pencoding);
}
/**取得表单元素值。 可以选择编码方式,根据传递过来的来设定**/
public String getParameter(String s,String encode)
{
if(s == null)
throw new IllegalArgumentException("表单名字无效!!!");
Hashtable one = (Hashtable)parameters.get(s);
if(one==null)
return null;
String returnvalue=(String)one.get(new Integer(0));
if(returnvalue==null) returnvalue="";
try {
returnvalue=new String(returnvalue.getBytes("ISO-8859-1"),encode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
if(returnvalue == null)
return null;
else
return returnvalue;
}
public String[] getParameterValues(String s)
{
if(s == null)
throw new IllegalArgumentException("Form's name is invalid or does not exist (1305).");
Hashtable hashtable = (Hashtable)this.parameters.get(s);
if(hashtable == null)
return null;
String as[] = new String[hashtable.size()];
for(int i = 0; i < hashtable.size(); i++)
as[i] = (String)hashtable.get(new Integer(i));
return as;
}
public SmartUpload getRequest()
{
return this;
}
public Enumeration getParameterNames()
{
return this.parameters.keys();
}
public SmartUpload getFiles()
{
return this;
}
public int getCount() //返回附件个数
{
return files.size();
}
public int getFCount() //返回附件个数
{
return getCount();
}
public String getUFileName(int aa)
{
//aa表示第几个附件,返回上传附件的名字
FileItem item=(FileItem)files.get(aa+"");
String fileName = item.getName();
fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
return fileName;
}
public String getFieldNames(int aa) //返回附件表单域的name
{
FileItem item=(FileItem)files.get(aa+"");
return item.getFieldName();
}
public String getUgetContentType(int aa)
{
// aa表示第几个附件,返回附件的格式,比如doc,xml,mp3
FileItem item=(FileItem)files.get(aa+"");
return item.getContentType();
}
public InputStream getUFileInputStream(int aa) throws IOException//返回输入流
{
FileItem item=(FileItem)files.get(aa+"");
return item.getInputStream();
}
public int getFLength(int aa) //返回附件大小
{
FileItem item=(FileItem)files.get(aa+"");
return (int)item.getSize();
}
public boolean isUfile(int aa) //判断该附件是否为空。
{
if(getUFileName(aa).equals(""))
return false;
else
return true;
}
public void clean()
{
//System.out.println("g关闭流文件");
//关闭流文件等资源性
}
}
Tags:SmartUpload FileUpload 无缝
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接