- 浏览: 234633 次
- 性别:
- 来自: 上海
博客专栏
-
Java应用集锦
浏览量:22400
文章分类
最新评论
-
yipeng_666:
yipeng_666 写道楼主可以分享源码吗 , 感激不尽邮 ...
基于jquery框架dwz做的后台管理系统 -
yipeng_666:
楼主可以分享源码吗 , 感激不尽
基于jquery框架dwz做的后台管理系统 -
ughome:
楼主,能发个源码吗,我删除后刷新有问题,总是跳转到第一页。查询 ...
基于jquery框架dwz做的后台管理系统 -
ellie_it:
DWZ研究中,楼主可以分享源码学习下吗?万分感谢! 93020 ...
基于jquery框架dwz做的后台管理系统 -
hongshenghome:
前辈,dwz刚开始学,给我发份源码,万分感谢!!!!!,邮箱 ...
基于jquery框架dwz做的后台管理系统
转载请注明出处: http://renjie120.iteye.com/
使用fileupload上传文档,并保存到blob字段中,上传的过程中显示进度.
<form name="uploadform" id="uploadform" method="POST" action="upload.action" ENCTYPE="multipart/form-data" target="hidden"> 上传文件1: <input type="file" id="filename1" name="filename1" onchange="setflag(true);" onblur="getFileSize('filename1','fileinf1');" name="filename"> <div id="fileinf1" style="display: none"></div> <br> 上传文件2: <input type="file" id="filename2" name="filename2" onchange="setflag(true);" onblur="getFileSize('filename2','fileinf2');" name="sheet"> <div id="fileinf2" style="display: none"></div> <br> 上传文件3: <input type="file" id="filename3" name="filename3" onchange="setflag(true);" onblur="getFileSize('filename3','fileinf3');" name="sheet"> <div id="fileinf3" style="display: none"></div> <br> 上传文件4: <input type="file" accept="image/gif" name="filename4" id="filename4" onchange="setflag(true);" onblur="getFileSize('filename4','fileinf4');" name="sheet"> <div id="fileinf4" style="display: none"></div> <br> <button onclick="upload();"> 上传 </button> </form>
action:
package upload; import java.io.File; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.DiskFileUpload; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.ProgressListener; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.lsframe.mvc.ActionContext; public class NewUpload { private Log log = LogFactory.getLog("logger"); private long maxsize = 1000000000; UploadDao dao = new UploadDao(); public String execute() throws Exception { ActionContext context = ActionContext.getContext(); final HttpServletRequest request = context.getHttpServletRequest(); DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置内存里面存储的文件的最大字节 factory.setSizeThreshold(10000); // 设置超出文件大小限制的文件存储的位置! factory.setRepository(new File("c:\\temp")); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(maxsize); // 下面是监听上传的进度的代码. ProgressListener progressListener = new ProgressListener() { private long megaBytes = -1; public void update(long pBytesRead, long pContentLength, int pItems) { System.out.println("We are currently reading item " + pItems); long mBytes = pBytesRead / 1000000; System.out.println(mBytes); if (megaBytes == mBytes) { return; } System.out.println(" " + pItems); megaBytes = mBytes; System.out.println("We are currently reading item " + pItems); if (pContentLength == -1) { System.out.println("So far, " + pBytesRead + " bytes have been read."); } else { System.out.println("So far, " + pBytesRead + " of " + pContentLength + " bytes have been read."); } } }; // 对加载对象添加进度监听. upload.setProgressListener(progressListener); FileItem fi = null; String fileName = ""; int endtag = 0; String shortName = ""; Iterator it = null; //下面的这句话必须放在上面的进度监听后面才可以在监听里面得到信息!! final List fileItems = upload.parseRequest(request); try { it = fileItems.iterator(); while (it.hasNext()) { fi = (FileItem) it.next(); fileName = fi.getName(); endtag = fileName.lastIndexOf("\\"); if (endtag == -1) { continue; } shortName = fileName.substring(endtag + 1); //下面演示保存到数据库的大对象字段 UploadVO file = new UploadVO(shortName,fi.get(),(int)fi.getSize()); file = dao.preSaveBlob(file); dao.insertIntoBlob(file); } request.setAttribute("aaa", "上传OK!"); } catch (Exception e) { e.printStackTrace(); request.setAttribute("aaa", "上传失败,文件最大不得超过" + new Long(maxsize).toString() + "字节!"); } return "success"; } /** * 得到上传的进度信息,返回进度条的json信息.. * * @return */ public String getUploadProgress() { return null; } /** * 返回指定文件的大小 * * @param fileName * @return */ public String getMaxFileSize() { String str = new Long(maxsize).toString(); return str; } }
保存到blob字段,首先要插入一个空的blob字段占位,然后再以io流的方式写到数据库中的这个字段:
package upload; import java.io.IOException; import java.io.OutputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import oracle.sql.BLOB; import com.lsframe.jdbc.DBPoolManager; import com.lsframe.jdbc.DataBase; public class UploadDao { private DataBase dao = new DataBase(); /** * 添加大对象之前先保存一个位置,添加一个空的对象进去 * @return * @throws SQLException */ public int insertIntoBlob(UploadVO file) throws SQLException { String saveSql = "SELECT BLOB_CONTENT FROM TEST_BLOB_T WHERE BLOB_ID = ? FOR UPDATE"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rest = null; boolean ans = false; conn = DBPoolManager.getInstance().getDBConn(); try { conn.setAutoCommit(false); pstmt = conn.prepareStatement(saveSql); pstmt.setString(1, file.getBlobId()); rest = pstmt.executeQuery(); if (rest.next()) { ans = saveToDatabase((BLOB) rest.getBlob("BLOB_CONTENT"), file.getFileContent(), file.getFsize()); } conn.setAutoCommit(true); } catch (Exception e) { System.out.println("保存大对象到数据库出错!\n错误信息:" + e.getMessage()); } finally { rest.close(); pstmt.close(); conn.close(); } return 0; } /** * 将大对象以字节流的方式写入到数据库中的blob字段. * @param blobContent 从数据库中返回的blob字段对象 * @param fileBody 要添加到字段中的文件,以字节数组的方式保存 * @param vSize 文件大小 * @return * @throws IOException */ private boolean saveToDatabase(BLOB blobContent, byte[] fileBody, int vSize) throws IOException { boolean result = false; try { OutputStream outstream = blobContent.getBinaryOutputStream(); outstream.write(fileBody, 0, vSize); outstream.close(); result = true; } catch (SQLException e) { result = false; e.printStackTrace(); } catch (Exception e) { result = false; e.printStackTrace(); } return result; } /** * 预添加大对象到数据库. * @return */ public UploadVO preSaveBlob(UploadVO file) { String getSeq = "SELECT TESTBLOBSEQ.NEXTVAL FROM DUAL"; String saveSql = "INSERT INTO TEST_BLOB_T(BLOB_CONTENT,BLOB_TIME,BLOB_SIZE,BLOB_NAME,BLOB_ID) VALUES " + "(EMPTY_BLOB(),SYSDATE,?,?,?)"; List argList = new ArrayList(); argList.add(file.getFsize()); argList.add(file.getFileName()); int ans = 0; String seq = ""; try { //查询数据库中的这个文件对应的流水号 seq = dao.queryForString(getSeq); argList.add(seq); //保存文件相关信息到数据库,并在文件内容的字段上面插入空的blob对象 ans = dao.updateRecords(saveSql,argList); file.setBlobId(seq); } catch (Exception e) { System.out.println("预添加大对象失败!\n错误信息:" + e.getMessage()); } return file; } }
相关的表的结构:
create table TEST_BLOB_T ( BLOB_ID VARCHAR2(30) not null, BLOB_SIZE NUMBER(20,4), BLOB_CONTENT BLOB, BLOB_TIME DATE, BLOB_NAME VARCHAR2(50) )
发表评论
-
test
2018-02-01 15:19 0testtesttesttest -
spring中使用AOP进行日志记录[含代码]
2017-09-13 15:14 731spring的IOC和AOP是说的最烂的东西,尤其是后者, ... -
关于java web开发中的很多小问题集锦
2017-05-11 11:24 19751、导出excel文件,文件名的中文问题 public ... -
自定义java类重写hashcode和equals方法
2014-12-24 15:34 12241.何时需要重写equals() 当一个类有自 ... -
java的普通类重写hashcode和equals方法
2014-12-24 15:33 0class AddServe { public Stri ... -
解决问题
2013-11-18 22:54 1365启动tomcat的时候,报错如下: java 写道 严 ... -
强烈推荐一个简单而实用的数据库连接池工程
2013-07-15 23:53 1064接触过很多的数据库连接池,有d3p0,druid,都比较nb ... -
自己写的一个jedis操作模板类
2013-07-15 23:28 1361jedis是java的redis客户端程序,在spring下 ... -
打算写一个关于股票的开源小玩意
2013-03-08 23:44 0目标: 1.锻炼自己的编码能力,组织代码的能力 2.为 ... -
java应用集锦9:httpclient4.2.2的几个常用方法,登录之后访问页面问题,下载文件
2012-11-16 16:03 19889转账注明出处:http://renjie120.iteye. ... -
java应用集锦8:使用poi进行excel操作,同时支持excel2003和2007
2011-06-21 21:42 6385下面的这段代码仅仅支持excel2003,要同时支持2007和 ... -
java应用集锦7:日期函数 double精度问题 list和数组等
2010-07-20 17:51 2406转载请注明出处: http://renjie120.itey ... -
java应用集锦6:字符串base64加密解密 MD5加密
2010-07-20 16:56 5545转载请注明出处: http://renjie120.it ... -
java应用集锦5:缓存管理 单例模式 ThreadLocal
2010-07-20 12:06 6377转载请注明出处: http://renjie120.it ... -
java应用集锦3:正则表达式 excel操作之jxl
2010-07-13 17:20 3240转载请注明出处: http://renjie120.it ... -
java应用集锦1:序列化 操作xml 常见IO
2010-07-12 19:42 1987转载请注明出处: http://renjie120.it ... -
java应用集锦2:反射
2010-07-07 17:52 1832在项目中多处使用到反射方法,jdk为1.5.现总结如下: 1 ... -
制作可以执行的jar包
2010-06-08 13:41 1186今天试了一下制作可执行的Jar文件的方法。 具体如下: 首 ... -
Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'的解决办法
2010-04-29 11:55 8590exception javax.servlet. ...
相关推荐
Java面试题集锦6:华为面试题 管理资料.pdfJava面试题集锦6:华为面试题 管理资料.pdfJava面试题集锦6:华为面试题 管理资料.pdfJava面试题集锦6:华为面试题 管理资料.pdfJava面试题集锦6:华为面试题 管理资料.pdf...
Java笔试题集锦/JAVA 基础/servlet笔试题目
Java 面试 最新 最全 算法 框架 语言;core java career essentials,542页完整版
JAVA案例开发集锦:分六个压缩卷,请都下载了再解压 第一压缩卷 下完后请把文件名改为:JAVA案例开发集锦[1].part1.rar.rar
JAVA案例开发集锦 第四压缩卷 下完后请把文件名改为:JAVA案例开发集锦[1].part4.rar.rar
Java编程精选集锦
Java经典项目集锦
555应用集锦 555应用集锦 555应用集锦 555应用集锦
JAVA精华集锦.JAVA精华集锦.JAVA精华集锦.JAVA精华集锦.JAVA精华集锦.JAVA精华集锦.
该光盘中有《Java案例开发集锦》一书中的所有案例源程序代码,编译通过的实例类代码和工程文件,以及案例中应用的数据库,并有在案例中涉及的相关Java类文件。配书光盘中全部内容包括: 1. chp1-chp10目录。分别...
JAVA案例开发集锦pdf JAVA案例开发集锦pdf JAVA案例开发集锦pdf
Java编程代码实例集锦.Java编程代码实例集锦.Java编程代码实例集锦.Java编程代码实例集锦.chm
如何设置Java 2(JDK1.2)的环境变量? 答: Java 2安装后,需要设置PATH和JAVA_HOME环境变量.与JDK1.1不同的是:设置好JAVA_HOME环境变量后,JVM将自动搜索系统类库以及用户的当前路径. Java 2环境变量的设置如下例所示...
java面试题集锦
java与游戏内涵6个小游戏源码 如扫雷,象棋,弹球,八皇后问题 是java初学者学习的基础源码~想做游戏的可以参考看看!
java案例开发集锦(电子书)
一般直流日光灯采用分立元件组成,而这个电路由TWH8751功率开关加几个外围元件组成,电路简单、可靠、效率高,可用于停电时或野外照明。
Java常见问题集锦 Java常见问题集锦Java常见问题集锦
CAD应用集锦.rarCAD应用集锦.rarCAD应用集锦.rarCAD应用集锦.rarCAD应用集锦.rarCAD应用集锦.rarCAD应用集锦.rarCAD应用集锦.rarCAD应用集锦.rarCAD应用集锦.rarCAD应用集锦.rarCAD应用集锦.rarCAD应用集锦.rarCAD...
java性能优化集锦java性能优化集锦java性能优化集锦