搞定java文件上传的步骤
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