彻底搞定java文件上传

转载 2004年11月01日 16:42:00
 

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

彻底搞定c指针

一直对c指针心怀崇敬,因为总是容易糊涂。看了某大神写的《彻底搞定c指针》更是心怀感激,整理笔记一篇,以表谢意。 1、首先问问自己指针到底是什么东西? 2、指针和数组名的区别是啥? 数组名也是指针...
  • pipi666661
  • pipi666661
  • 2013年11月28日 00:06
  • 1173

彻底搞定java文件上传

JAVA的文件上传遍一直是一个比较关注的问题,而且有几个NB东西提供了这个功能.用的最多的算是三个(我就知道这三个)比较强的,一个是比较早的jspsmartupload,另一个是出身名族的common...
  • ezerg
  • ezerg
  • 2004年09月24日 11:28
  • 1705

彻底搞定java文件上传

JAVA的文件上传遍一直是一个比较关注的问题,而且有几个NB东西提供了这个功能.用的最多的算是三个(我就知道这三个)比较强的,一个是比较早的jspsmartupload,另一个是出身名族的common...
  • alex197963
  • alex197963
  • 2007年04月22日 08:31
  • 1102

彻底搞定java文件上传(转)

JAVA的文件上传遍一直是一个比较关注的问题,而且有几个NB东西提供了这个功能.用的最多的算是三个(我就知道这三个)比较强的,一个是比较早的jspsmartupload,另一个是出身名族的common...
  • panzi667
  • panzi667
  • 2004年10月23日 16:30
  • 1663

《彻底搞定C 指针》 观后感和摘要

姚云飞先生的大作《彻底搞定C 指针》是互联网上中文C/C++ 界内为数不多的专门阐述C 指针问题的优秀文献资源之一。 本文为观后感和摘要。 先看代码段: char  a,*pa;  a = 10...
  • zhyjtwgsnwxhn
  • zhyjtwgsnwxhn
  • 2015年05月11日 23:27
  • 208

[ZT]彻底搞定java文件上传zz

JAVA的文件上传遍一直是一个比较关注的问题,而且有几个NB东西提供了这个功能.用的最多的算是三个(我就知道这三个)比较强的,一个是比较早的jspsmartupload,另一个是出身名族的common...
  • YG200233
  • YG200233
  • 2004年12月17日 18:13
  • 1070

彻底搞定C语言指针详解完整版

http://www.360doc.com/content/11/0313/21/507289_100846724.shtml
  • deng_sai
  • deng_sai
  • 2015年06月16日 19:56
  • 1611

java日志体系

最近看了一个图灵的公开课,讲到了Java的日志体系。 log4j  :  log4j2:性能优于logbak logbak:性能优于log4j commonloging: 是门面,统一接口 ...
  • m13020157417
  • m13020157417
  • 2018年01月22日 15:14
  • 21

7天搞定Node.js微信公众号开发

TB2CqwscY5K.eBjy0FfXXbApVXa_!!717644871.png (170.55 KB, 下载次数: 0) 下载附件 前天 13:35 上传 ...
  • u013948190
  • u013948190
  • 2016年12月16日 16:02
  • 2675

彻底搞定NIO(一)

因为小组要使用jetty和thrift等框架的原因,这些框架的很多设计思想实现都是基于NIO的,之前接触NIO都是懵懵懂懂的,所以这一次决心搞定NIO。 通道和缓冲区 概述 ...
  • chenpeng19910926
  • chenpeng19910926
  • 2017年07月19日 15:33
  • 61
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:彻底搞定java文件上传
举报原因:
原因补充:

(最多只允许输入30个字)