- 浏览: 1678476 次
- 性别:
-
文章分类
- 全部博客 (2929)
- 非技术 (18)
- Eclipse (11)
- JAVA (31)
- 正则表达式 (0)
- J2EE (4)
- DOS命令 (2)
- WEB前端 (52)
- JavaScript (69)
- 数据库 (8)
- 设计模式 (0)
- JFreechart (1)
- 操作系统 (1)
- 互联网 (10)
- EasyMock (1)
- jQuery (5)
- Struts2 (12)
- Spring (24)
- 浏览器 (16)
- OGNL (1)
- WebService (12)
- OSGi (14)
- 软件 (10)
- Tomcat (2)
- Ext (3)
- SiteMesh (2)
- 开源软件 (2)
- Hibernate (2)
- Quartz (6)
- iBatis (2)
最新评论
彻底搞定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的方式,如果想要其它的方式,请下载全部源代码.
//upload_fileUpload.jsp
<%@ include file = "../../backgeneral.jsp"%>
<%@ contentType="text/html;charset=GBK" %>
<jsp:useBean id="userInfo" scope="session" class="com.ges.hbgov.UserInfo"/>
<%@ page import="org.apache.commons.fileupload.*" %>
<%
try{
//request.setCharacterEncoding("GBK");
//取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;
%>
<%
DiskFileUpload df = new DiskFileUpload();
//设定上传文件大小
df.setSizeMax(maxPostSize);
//设定临时目录
df.setRepositoryPath(sitePhysicalPath + tempDir);
//取得request信息
List items = df.parseRequest(request);
Iterator iter = items.iterator();
int temp = 0;
FileItem tempItem = null;
while(iter.hasNext()){
temp++;
FileItem item = (FileItem)iter.next();
if(item.isFormField()) //取得文件说明信息
{
fileMemo = item.getString("GBK");
}
else
{ //取得上传文件信息
fileName = (String)item.getName();
try{
fileName = fileName.substring(fileName.lastIndexOf("//")+1);
fileName = fileName.substring(fileName.lastIndexOf("/")+1);
}catch(Exception e){
System.out.println(e);
}
fileSize = item.getSize();
tempItem = item;
}
if(temp == 2 && fileSize != 0)
{ //每两个iter存储一个上传文件
//得到info_title_id
String SQL_ID="select S_INFO_UPLOAD.nextval as seqid from dual";
try {
java.sql.Statement stmt = con.createStatement();
java.sql.ResultSet rst= stmt.executeQuery(SQL_ID);
while(rst.next())
{
dinfo_upload_id = rst.getInt("seqid");
}
}catch(SQLException e1){
return;
}
//取得文件扩展名
try{
saveName = fileName.substring(fileName.lastIndexOf("."));
}catch(Exception exc){
saveName = "";
}
filePath = sitePhysicalPath + saveDir + Integer.toString(dinfo_upload_id) + saveName;
//存储文件
java.io.File uploadFile = new java.io.File(filePath);
tempItem.write(uploadFile);
/*try{
FileOutputStream fos = new FileOutputStream(filePath);
InputStream is = tempItem.getInputStream();
byte[] b = new byte[1024];
int nRead;
long per = 0;
double percent = 0;
while((nRead = is.read(b, 0, 1024))>0){
fos.write(b, 0, nRead);
per += nRead;
percent = (double)per/fileSize;
session.setAttribute("percent",Double.toString(percent).substring(2,4));
session.setAttribute("filename",fileName);
}
is.close();
fos.close();
}catch(Exception e){
System.out.println(e);
}*/
savePath = saveDir + Integer.toString(dinfo_upload_id) + saveName;
/*/存储数据库
String sql = " INSERT INTO info_upload (info_upload_id,sys_user_id,file_name,file_memo,file_size,file_path,utime,deleted) "
+ " VALUES( " + Integer.toString(dinfo_upload_id) + "," + sys_user_id + ",'" + fileName + "','" + fileMemo + "'," + fileSize + ",'" + savePath + "', SYSDATE , 0 )" ;
sqlcmd cmd = new sqlcmd(con,sql);
*/
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");
}
temp = 0;
}
else if (temp == 2 && fileSize == 0) {temp = 0;}
}
//session.setAttribute("percent","ok");
}catch(Exception ex){
System.out.println(ex);
}
response.sendRedirect("list.jsp");
%>
//upload_jspSmart.jsp
<%@ include file = "../../backgeneral.jsp"%>
<%@ page language="java" import="java.util.*,java.sql.*,java.io.*"%>
<%@ page language="java" import="com.jspsmart.upload.*"%>
<%@ page language="java" import="com.ges.hbgov.*"%>
<jsp:useBean id="userInfo" scope="session" class="com.ges.hbgov.UserInfo"/>
<jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
<%
//System.out.println("page=" + (String)session.getAttribute("SYS_USER_ID"));
if(!userInfo.Request(request)){
%>
<script language=javascript>
function relogin() {
this.parent.location.href="../../login.jsp";
}
relogin();
</script>
<%
}
%>
<%
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){
}
response.sendRedirect("list.jsp");
%>
相关推荐
### 彻底搞定Java文件上传:jspsmartupload、commonupload与orellay对比解析 在Java开发领域中,文件上传一直是备受关注的功能之一。针对这一需求,开发者们通常会选用几种较为流行的库来实现这一功能,其中包括较...
上载文件.轻松搞定.java Servlet上传文件.
《彻底搞定C指针》是一本专为C语言学习者准备的深度指南,尤其是针对C指针这一核心概念。本书的完全版与修订增补版更是在原有的基础上进行了完善和加强,旨在帮助读者全面理解并熟练掌握C语言中的指针操作。 C语言...
### JAVA课堂笔记知识点详解 #### 一、Java简介与历史沿革 - **Java起源与发展:** Java由Sun Microsystems公司于1991年启动的Green项目演变而来,最初目标是设计一种能够通过电子邮件控制家电的编程语言。项目...
【彻底搞定C指针】 C语言中的指针是其强大特性和灵活性的关键所在。要彻底掌握C指针,首先需要理解变量在内存中的存储方式。在C语言中,每个变量都占据一段内存空间,每段内存空间都有一个唯一的地址。当我们声明一...
uniapp前端单文件上传JAVA后台接收实现(亲测),还有单文件上传亲测哦,可以都看看,研究了一天,终于搞定,支持原创
7天零基础搞定java开发,深刻体会面向对象,自己开发游戏引擎--教材版 7天零基础搞定java开发,深刻体会面向对象,自己开发游戏引擎--教材版 7天零基础搞定java开发,深刻体会面向对象,自己开发游戏引擎--教材版 7天零...
本文将深入探讨“彻底搞定C指针”的主题,帮助你全面掌握这一关键概念。 一、指针的概念 C语言中的指针是一种特殊的变量,它存储的是内存地址,而不是数据本身。通过指针,我们可以间接访问和修改内存中的数据。...
姚云飞先生的大作《彻底搞定C指针》是互联网上中文C/C++界内为数不多的专门阐述C指针问题的优秀文献资源之一。 正如书名所示,对于那些学习了C基础知识却始终对C指针不得要领的读者,或者那些已经长期被C指针困扰的...
### Java调用DLL文件中的函数 #### 知识点概览 本文将详细介绍如何在Java环境中调用DLL(动态链接库)文件中的函数,并通过一个具体的示例来演示这一过程。主要内容包括: - Java Native Access (JNA) 库的介绍与...
### 一键搞定Java桌面应用安装部署 在Java开发领域中,尤其对于桌面应用程序而言,一个常见而又令人头疼的问题就是如何高效地完成应用的安装与部署。一方面,Java以其跨平台特性受到开发者的青睐;另一方面,复杂的...
jdk 环境变量 JAVA_HOME 批处理文件 双击搞定 最多只需修改个JAVA-HOME,其他的classpath path之类的bat文件搞定
运用apache的fileupload库实现文件上传,运用jxl分析导入的excel数据。 只需在现有页面上添加一个“导入”按钮就可实现excel导入数据库的功能,点击“导入”按钮,选择要上传的文件后会立即开始上传。 采用iframe的...
根据给定的文件标题、描述、标签以及部分内容,我们可以从中提炼出与Java编程相关的知识点,具体如下: ### 标题:“23天轻松搞定Java” 该标题表明这是一份关于在23天内掌握Java基础知识的学习资料。它暗示了这份...
3. **平台无关性**:Java程序编译成字节码(.class文件),可以运行在任何支持Java虚拟机(JVM)的平台上。 4. **安全性**:Java提供了许多安全特性,包括沙箱机制等,能够有效防止恶意代码的执行。 5. **性能**:...
搞定JAVA2EE源代码 书本代码,为了不坑大家积分,其余部分上传到了我的网盘http://pan.baidu.com/s/1kT5LgSv http://pan.baidu.com/s/1sjQ7EMD http://pan.baidu.com/s/1dDxPRw9 http://pan.baidu.com/s/1sjO5MtZ