您的位置:首页 > 数据库 > Oracle

用uploadfile组件实现动态文件上传到ORACLE数据库

2010-06-07 23:28 846 查看
uploadfile组件是apache开发的用于文件上传的JAVA组件。笔者经过研究,终于实现了动态多文件向数据库上传,现将示例程序介绍如下:

1.组件:笔者使用的是commons-upload-1.2.jar和commons-io-1.3.2.jar,下载后将这两个jar包复制到WEBROOT/WEB-INF/lib下。

2.JSP文件:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<script type="text/javascript">
var attachname = "attach";
var i=1;
function addInput(){
if(i>0){
var attach = attachname + i ;
if(createInput(attach))
i=i+1;
}

}
function deleteInput(){
window.alert(i);
if(i>1){
i=i-1;
if(!removeInput())
i=i+1;
}
}

function createInput(nm){
var aElement=document.createElement("input");
aElement.name=nm;
aElement.id=nm;
aElement.type="file";
aElement.size="50";
var obj = document.getElementById("upload");
var r =obj.insertRow().insertCell();
temp = "<input type = file name = nm size = 50> ";
r.innerHTML+=temp;
return true;

//aElement.value="thanks";
//aElement.onclick=Function("asdf()");
// if(document.getElementById("upload").appendChild(aElement) == null)
// return false;
// return true;
}

function removeInput(){
var obj = document.getElementById("upload");
//if(obj.rows.length == 1) return false;
obj.deleteRow();
return true;
//if(aElement.removeChild(aElement.lastChild) == null)
// return false;
//return true;
}

</script>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'MyJsp.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>

<form action="servlet/testuploadimg" method="post" enctype="multipart/form-data">
<p>
<input type="button" name="button" value="添加附件" onclick="addInput()">
<input type="button" name="button" value="删除附件" onclick="deleteInput()">
</p>
<table width="200" border="0" id="upload">
<tr>
<td><input type="file" name="attach0" size="50"></td>
</tr>
</table>
<input type="submit" value="确认上传" name="submit">
<p> </p>
</form>

</body>
</html>
3.servlet

package Model;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import voucher.basic.DBHelper;

public class testuploadimg extends HttpServlet {

/**
* Constructor of the object.
*/
public testuploadimg() {
super();
}

/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
boolean hasfile = true;
int j = 11;
String dd = "";
String filename = "";
InputStream filestream = null;
String mySql = "";
DBHelper dbc = new DBHelper();
DiskFileItemFactory factry = new DiskFileItemFactory(); //实例化磁盘工厂
ServletFileUpload svrupload = new ServletFileUpload(factry); //定义上传文件类
svrupload.setSizeMax(200*1024); //文件大小
try {
List fileList = svrupload.parseRequest(request); //客户端获取文件集合
Iterator fileitr = fileList.iterator(); //获取fileList指针
while(fileitr.hasNext()){ //遍历集合fileList
FileItem fileitem = null; //设置FILEITEM对象
String path = null; //保存文件所在路径
long filesize = 0; //保存文件长度
fileitem = (FileItem)fileitr.next(); //取得FileItem对象
if(fileitem == null || fileitem.isFormField()){ //对象为空或不是文件域
continue; //循环查找下一个FILEITEM对象
}
path = fileitem.getName(); //获取包括全路径的文件名
filesize = fileitem.getSize(); //获取文件长度
if(path.equals("")||filesize == 0){ //无上传文件返回
hasfile = false;
return;
}
filename = path.substring(path.lastIndexOf("//") + 1); //取得文件名
filestream = fileitem.getInputStream(); //获取文件输入流对象

//实现文件上传代码成功
// filename = request.getRealPath("/") +"/"+ "filename1.gif";
// FileOutputStream fos = new FileOutputStream(filename);
// byte[] buffer = new byte[(int) filesize];
// int count = 0;
// while((count = filestream.read(buffer))>0){
// fos.write(buffer, 0, count);
//
// }
// fos.close();
// filestream.close();

//将文件上传至数据库

//byte[] imgdata = new byte[(int)filesize];
Connection dbcon = dbc.openDataBase();
mySql = "insert into TESTIMG(IMGID,IMG) values(?,?)";
try {

PreparedStatement stat = dbcon.prepareStatement(mySql);
dd = Integer.toString(j);
stat.setString(1, dd);
j++;
stat.setBinaryStream(2, filestream, (int)filesize);
stat.executeUpdate();
stat.close();
dbcon.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}

/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}

}

本示例程序只是说明如何使用uploadfiles组件实现动态文件向数据库上传,其中未对文件大小、类型加以限制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: