- 浏览: 237697 次
- 性别:
- 来自: 上海
博客专栏
-
Java应用集锦
浏览量:22908
文章分类
最新评论
-
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 772spring的IOC和AOP是说的最烂的东西,尤其是后者, ... -
关于java web开发中的很多小问题集锦
2017-05-11 11:24 21451、导出excel文件,文件名的中文问题 public ... -
自定义java类重写hashcode和equals方法
2014-12-24 15:34 12641.何时需要重写equals() 当一个类有自 ... -
java的普通类重写hashcode和equals方法
2014-12-24 15:33 0class AddServe { public Stri ... -
解决问题
2013-11-18 22:54 1411启动tomcat的时候,报错如下: java 写道 严 ... -
强烈推荐一个简单而实用的数据库连接池工程
2013-07-15 23:53 1112接触过很多的数据库连接池,有d3p0,druid,都比较nb ... -
自己写的一个jedis操作模板类
2013-07-15 23:28 1416jedis是java的redis客户端程序,在spring下 ... -
打算写一个关于股票的开源小玩意
2013-03-08 23:44 0目标: 1.锻炼自己的编码能力,组织代码的能力 2.为 ... -
java应用集锦9:httpclient4.2.2的几个常用方法,登录之后访问页面问题,下载文件
2012-11-16 16:03 19948转账注明出处:http://renjie120.iteye. ... -
java应用集锦8:使用poi进行excel操作,同时支持excel2003和2007
2011-06-21 21:42 6466下面的这段代码仅仅支持excel2003,要同时支持2007和 ... -
java应用集锦7:日期函数 double精度问题 list和数组等
2010-07-20 17:51 2443转载请注明出处: http://renjie120.itey ... -
java应用集锦6:字符串base64加密解密 MD5加密
2010-07-20 16:56 5624转载请注明出处: http://renjie120.it ... -
java应用集锦5:缓存管理 单例模式 ThreadLocal
2010-07-20 12:06 6474转载请注明出处: http://renjie120.it ... -
java应用集锦3:正则表达式 excel操作之jxl
2010-07-13 17:20 3320转载请注明出处: http://renjie120.it ... -
java应用集锦1:序列化 操作xml 常见IO
2010-07-12 19:42 2082转载请注明出处: http://renjie120.it ... -
java应用集锦2:反射
2010-07-07 17:52 1908在项目中多处使用到反射方法,jdk为1.5.现总结如下: 1 ... -
制作可以执行的jar包
2010-06-08 13:41 1231今天试了一下制作可执行的Jar文件的方法。 具体如下: 首 ... -
Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'的解决办法
2010-04-29 11:55 8712exception javax.servlet. ...
相关推荐
在这本《Java面试集锦: Core Java Essentials》中,作者Arulkumaran Kumaraswami Pillai和Sivayini Arulkumaran深入探讨了Java平台、语言、类、对象、面向对象概念与原理、数据结构、算法和模式匹配基础,为读者准备...
- 包:java.util、java.io、java.lang、java.nio、java.sql - 接口:Runnable、Comparator、Serializable、Iterable 7. **ArrayList、Vector和LinkedList的比较**: - ArrayList和Vector都是基于数组实现,提供...
4. **集合框架**:Java集合框架包括List(如ArrayList,LinkedList),Set(如HashSet,TreeSet),Map(如HashMap,TreeMap)等接口和类。它们提供了存储和操作对象的高效方式。 5. **IO流**:Java的IO流库支持...
2. **J2EE**:Java 2 Platform, Enterprise Edition(J2EE)是Sun公司推出的企业级应用平台,它提供了一个多层架构,包括客户端层、Web层(如Servlet和JSP)、业务逻辑层(EJB)和企业信息系统层(如数据库)。...
4. **IO与NIO**:Java的输入/输出(I/O)和非阻塞I/O(NIO)是处理文件读写、网络通信的关键。通过实现文件管理系统或网络聊天应用,学习者可以深入理解流的概念,学会使用BufferedReader、BufferedWriter等类,以及NIO...
5. **鼠标操作**:Java的java.awt.event包提供了一系列鼠标事件,如MouseClicked、MouseDragged等,这些事件可以与特定的图形元素关联,实现交互式功能。 6. **计算器**:计算器应用通常涉及到基本的算术运算,可以...
4. **异常处理**:Java中的异常处理机制是程序健壮性的重要保障,书中的例子会展示如何使用try-catch-finally语句块捕获和处理异常。 5. **IO流**:Java的输入/输出流系统允许程序与外部资源交互,如文件操作、网络...
【标题】"基于NetBeans开发的Java应用程序集锦6"主要涵盖了使用NetBeans IDE进行Java应用程序开发的一些实例和实践。NetBeans是一个强大的开源集成开发环境,尤其适合Java开发者,提供了丰富的功能,包括代码编辑、...
13. **JPA与Hibernate**:Java持久化API和ORM(对象关系映射)框架,理解SQL与对象模型的映射。 14. **Java EE技术**:Servlet、JSP、JSF、EJB等,用于构建企业级Web应用程序。 15. **并发编程**:线程池、并发容器...
4. **多线程**:Java提供了丰富的多线程支持,如Thread类、Runnable接口、同步机制(synchronized关键字、Lock锁、信号量等)、线程池(ExecutorService)等。 5. **IO流与NIO**:输入/输出流的理解,以及...
【标题】基于NetBeans开发的Java应用程序集锦8 在这个集合中,我们聚焦于使用NetBeans IDE进行Java应用程序开发,特别是针对J2EE(Java 2 Platform, Enterprise Edition)技术的应用。NetBeans作为一款强大的开源...
JAVA案例开发集锦:分六个压缩卷,请都下载了再解压 第一压缩卷 下完后请把文件名改为:JAVA案例开发集锦[1].part1.rar.rar
4. **IO流**:Java的IO流系统是处理输入输出的重要工具,案例可能涵盖了文件读写、网络流、对象序列化等场景,帮助读者掌握数据传输和存储的方法。 5. **多线程**:Java提供了丰富的多线程支持,案例可能涉及线程...
18. **Lambda表达式**:Java 8引入的新特性,简化函数式接口的使用,提高代码的简洁性和可读性。 19. **Stream API**:处理集合数据的新方式,支持链式操作,方便进行数据过滤、映射和聚合。 20. **并发库(Java ...
4. **集合框架**:Java集合框架包括List、Set、Queue、Map等接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等,提供了存储和操作对象的高效方式。 5. **I/O流**:Java的I/O流用于读写文件、网络通信等...
本篇面试题集锦涵盖了数据结构的基本概念、常见类型以及它们在Java中的应用。 1. **数据结构**:数据结构是组织和存储数据的方式,目的是提高数据操作的效率。它包括了如何组织数据(如数组、链表),如何访问数据...
JAVA案例开发集锦 第四压缩卷 下完后请把文件名改为:JAVA案例开发集锦[1].part4.rar.rar
【标题】:“基于NetBeans开发的Java应用程序集锦5” 【描述】中提及的Java与网络的7个案例,展示了Java在实际应用中的强大功能,包括: 1. **简单多线程服务器**:在Java中,多线程是并发处理的基础,通过实现...
1. Java编程基础:案例集锦从Java的基础概念讲起,包括类、对象、接口、线程和继承等关键概念。这些是Java编程的核心,每个Java开发者都必须熟练掌握。 2. Applet案例:书中包含有关Java Applet的案例,这是一种...
4. **集合框架**:Java集合框架是存储和管理对象的工具,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)和Map(如HashMap和TreeMap)。了解它们的特点、用法以及如何操作它们,是提高代码效率的...