分享
 
 
 

彻底搞定java文件上传

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

JAVA的文件上传遍一直是一个比较关注的问题,而且有几个NB东西提供了这个功能.

用的最多的算是三个(我就知道这三个)比较强的,一个是比较早的jspsmartupload,另一个是出身名族的commonupload,还有一个就是orellay的了.

我用的比较多是前两个,总的感觉是jspsmartuplod比较灵活,功能上更强一些(一点点吧),但是现在网上也不维护,也不能下载了,特别是它上传的时候把上传文件放到内存里,所以上传文件的大小会和内存有关系.commonupload虽然没有提供很多API,但是它有比较灵活,它上传的过程中会把上传的文件先写入磁盘,所以上传的大小只是带宽有关系,我尝试最大的上传文件的大小是700M,当然是本地测试:>

还有是就是在Linux/Unix系统上传文件的中文问题,我在下面的代码有了一些解决.

下面是前两种方式的上传代码:

try{

//取session 用户oid

int pid = userInfo.getUserId();

String sys_user_id = String.valueOf(pid);

//取init配置文件的参数值

String sitePhysicalPath = (String)init.getObject("SitePhysicalPath");

String saveDir = (String)init.getObject("InfoUploadDir");

String tempDir = (String)init.getObject("InfoUploadDir");

String fileMemo = ""; //文件说明

String fileName = null; //存储到数据库的文件名

String saveName = null; //存储到本地的文件名

String filePath = null; //存储到数据库的文件路径

String savePath = null; //存储到本地的文件路径

long fileSize = 0; //文件大小

int maxPostSize = -1;

int dinfo_upload_id = -1;

%>

<%

//初始化

mySmartUpload.initialize(pageContext);

//上载文件

mySmartUpload.upload();

//循环取得所有上载文件

for(int i=0; i<mySmartUpload.getFiles().getCount(); i++)

{

//取得上载文件

com.jspsmart.upload.File file = mySmartUpload.getFiles().getFile(i);

if(!file.isMissing())

{

fileName = file.getFileName();

//取得文件扩展名file.getFileExt()

try{

saveName = fileName.substring(fileName.lastIndexOf("."));

}catch(Exception e){

saveName = "";

}

//取得文件大小

fileSize = file.getSize();

//存储路径

String sql_id = " SELECT S_INFO_UPLOAD.nextval as seqid FROM dual ";

try{

Statement stmt = con.createStatement();

ResultSet rst = stmt.executeQuery(sql_id);

while(rst.next())

{

dinfo_upload_id = rst.getInt("seqid");

}

}catch(SQLException sqle){

return;

}

filePath = sitePhysicalPath + saveDir + Integer.toString(dinfo_upload_id) + saveName;

savePath = saveDir + Integer.toString(dinfo_upload_id) + saveName;

//存储文件到本地

file.saveAs(filePath);

//存储文件到数据库

switch(i)

{

case 0: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo1"); break;

case 1: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo2"); break;

case 2: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo3"); break;

case 3: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo4"); break;

case 4: fileMemo = (String)mySmartUpload.getRequest().getParameter("memo5"); break;

default: fileMemo = "";

}

String sql = " INSERT INTO info_upload (info_upload_id,sys_user_id,file_size,file_path,utime,deleted) "

+ " VALUES( " + Integer.toString(dinfo_upload_id) + "," + sys_user_id + "," + fileSize + ",'" + savePath + "', SYSDATE , 0 )" ;

sqlcmd cmd = new sqlcmd(con,sql);

//System.out.println(sql);

java.sql.PreparedStatement pstmt = null;

java.sql.Statement stmt = null;

//fileName = fileName.substring(0, fileName.indexOf("."));

String sql_cn = " UPDATE info_upload SET file_name=?,file_memo=? WHERE info_upload_id=? ";

java.io.ByteArrayInputStream bais_name = new java.io.ByteArrayInputStream(fileName.getBytes("ISO-8859-1"));

java.io.InputStreamReader isr_name = new java.io.InputStreamReader((InputStream)bais_name,"GBK");

java.io.ByteArrayInputStream bais_memo = new java.io.ByteArrayInputStream(fileMemo.getBytes("GBK"));

java.io.InputStreamReader isr_memo = new java.io.InputStreamReader((InputStream)bais_memo,"GBK");

try{

stmt = con.createStatement();

stmt.getConnection().setAutoCommit(false);

pstmt = con.prepareStatement(sql_cn);

pstmt.setCharacterStream(1, isr_name, fileName.length());

pstmt.setCharacterStream(2, isr_memo, fileMemo.length());

pstmt.setInt(3, dinfo_upload_id);

//System.out.println(sql_cn);

pstmt.execute();

stmt.executeUpdate("COMMIT");

}catch(Exception exce){

System.out.println(exce);

stmt.executeUpdate("ROLLBACK");

}

}

}

}catch(Exception e){

}

以上是jspsmart的方式,如果想要其它的方式,请下载全部源代码.

现在网上已经不提供jspsmartupload下载,如果您没有这个包可以在本站下载.

点击下载

如果把有什么问题,可与我联系:webmaster@bcxy.com

全部源码及相关文档下载

出处:http://www.bcxy.com/java/javaupload.htm

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有