servlet上传 急,请问大家谁有servlet上传图片的例子代码,贴出来,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BLOB字段,二进制LOB,主要存储二进制数据,最长为4G,在J2EE程序中,一般类似于图片和文件的保存。当然也有另一种方法,就把图片和文件保存在硬盘上,数据库中只保存图片的链接地址和文件在服务器上的路径。如果遇到文件和图片比较重要的还是需要保存到数据库中(例如:我们做国土资源项目的时候,好多图片、文件就很重要,需要保存到数据库中),下面我写一个保存文件到数据库的Blob字段和从数据库的Blob字段中获取文件的方法(当然完全应用还要做其他工作,这里就不多说了,如果你不清楚的可以问我):/*** 把上传的文件保存到数据库的Blob字段中* @param strTableName 对应的表名称* @param strColumnName 表中保存文件的Blob字段名称* @param inputStream 输入的文件流* @param sbSQLWhere where条件* @throws java.lang.Exception*/public static void fileUpload(String strTableName,String strColumnName,InputStream inputStream,StringBuffer sbSQLWhere)throws Exception {Connection con = null;ResultSet resultset = null;Statement stmt = null;try {//得到数据库连接con = DBConnector.getConnection();//构建查询语句StringBuffer sbSQL = new StringBuffer();sbSQL.append(" UPDATE ");sbSQL.append(strTableName);sbSQL.append(" SET ");sbSQL.append(strColumnName);sbSQL.append("=EMPTY_BLOB() ");sbSQL.append(sbSQLWhere);System.out.println(" update sql value is*******"+sbSQL.toString());//获取数据库操作语句stmt=con.createStatement();//插入空的blob对象stmt.executeUpdate(sbSQL.toString());con.setAutoCommit(false);StringBuffer sbSQLBlob = new StringBuffer();sbSQLBlob.append(" SELECT ");sbSQLBlob.append(strColumnName);sbSQLBlob.append(" FROM ");sbSQLBlob.append(strTableName);sbSQLBlob.append(sbSQLWhere);sbSQLBlob.append(" FOR UPDATE");System.out.println(" select sql value is*********"+sbSQL.toString());resultset =stmt.executeQuery(sbSQLBlob.toString());while (resultset.next()) {/* 取出此BLOB对象 */oracle.sql.BLOB blob = (oracle.sql.BLOB)resultset.getBlob("BODY");/* 向BLOB对象中写入数据 */BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());BufferedInputStream in = new BufferedInputStream(inputStream);int c;while ((c=in.read())!=-1) {out.write(c);}in.close();out.close();}con.setAutoCommit(false);con.commit();} catch (Exception ex) {ex.printStackTrace();throw ex;} finally {if (stmt != null) {stmt.close();}If (resultset != null) {resultset.close();}if (con!=null) {con.close();}}}下面的方法是从数据库中得到上传的文件的输入流,把输入流写到servlet流中,再从页面中获取,servlet就不写了。/*** 方法描述:得到数据库上传的文件数据* 输入参数: * 1:表名(String)* 2:字段名(String)* 3: Where条件(StringBuffer)* 4: 输出流(ServletOutputStream)* 输出参数:void* 编写人: */public static void getdownFile(String strTableName,String strColumnName,StringBuffer sbSQLWhere,ServletOutputStream sos) throws Exception {Connection con = null;PreparedStatement ps = null;ResultSet resultset = null;try {//得到数据库连接con = DBConnector.getConnection();StringBuffer sbSQL = new StringBuffer();//构建查询语句sbSQL.append(" SELECT " + strColumnName + " FROM " + strTableName);sbSQL.append(sbSQLWhere);System.out.println(" sql value is:"+sbSQLWhere.toString());ps = con.prepareStatement(sbSQL.toString());//执行查询resultset = ps.executeQuery();while (resultset.next()) {//读取数据流InputStream is = resultset.getBinaryStream(strColumnName);byte[] buf = new byte[2048];while(is.read(buf)!=-1) {//把数据流按块写到servlet的输出流中sos.write(buf);}}} catch (Exception ex) {ex.printStackTrace();throw ex;} finally {if (ps != null) {ps.close();}if (resultset != null) {resultset.close();}if (con!=null) {con.close();}}} JBOSS7部署SSH出错,大家帮忙看看吧。 求帮助:jdeveloper无法验证weblogic 页面发不出请求是怎么回事? struts2 和 hibernate 写的一个插入数据程序,点确定时报错如下!? 写一个公共文件,测试用户是否为会员,怎么写? 您的帮助是我学习最大的动力:我用WSAD写数据库连接的JAVABean出错! 怎样更新提交表单中的多条内容 为图书馆作的表结构,这是读者表,书籍表,借还情况表。请大家给看看,行不行的通? 谁用过jive,我有些问题不明白 如何将数字,日期型转化成字符串 struts页面显示图片的问题 求大家帮忙
* 把上传的文件保存到数据库的Blob字段中
* @param strTableName 对应的表名称
* @param strColumnName 表中保存文件的Blob字段名称
* @param inputStream 输入的文件流
* @param sbSQLWhere where条件
* @throws java.lang.Exception
*/
public static void fileUpload(String strTableName,
String strColumnName,
InputStream inputStream,
StringBuffer sbSQLWhere)
throws Exception {
Connection con = null;
ResultSet resultset = null;
Statement stmt = null;
try {
//得到数据库连接
con = DBConnector.getConnection();
//构建查询语句
StringBuffer sbSQL = new StringBuffer();
sbSQL.append(" UPDATE ");
sbSQL.append(strTableName);
sbSQL.append(" SET ");
sbSQL.append(strColumnName);
sbSQL.append("=EMPTY_BLOB() ");
sbSQL.append(sbSQLWhere);
System.out.println(" update sql value is*******"+sbSQL.toString());
//获取数据库操作语句
stmt=con.createStatement();
//插入空的blob对象
stmt.executeUpdate(sbSQL.toString());
con.setAutoCommit(false);
StringBuffer sbSQLBlob = new StringBuffer();
sbSQLBlob.append(" SELECT ");
sbSQLBlob.append(strColumnName);
sbSQLBlob.append(" FROM ");
sbSQLBlob.append(strTableName);
sbSQLBlob.append(sbSQLWhere);
sbSQLBlob.append(" FOR UPDATE");
System.out.println(" select sql value is*********"+sbSQL.toString());
resultset =stmt.executeQuery(sbSQLBlob.toString());
while (resultset.next()) {
/* 取出此BLOB对象 */
oracle.sql.BLOB blob = (oracle.sql.BLOB)resultset.getBlob("BODY");
/* 向BLOB对象中写入数据 */
BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
BufferedInputStream in = new BufferedInputStream(inputStream);
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}
con.setAutoCommit(false);
con.commit();
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
} finally {
if (stmt != null) {
stmt.close();
}
If (resultset != null) {
resultset.close();
}
if (con!=null) {
con.close();
}
}
}
下面的方法是从数据库中得到上传的文件的输入流,把输入流写到servlet流中,再从页面中获取,servlet就不写了。
/**
* 方法描述:得到数据库上传的文件数据
* 输入参数:
* 1:表名(String)
* 2:字段名(String)
* 3: Where条件(StringBuffer)
* 4: 输出流(ServletOutputStream)
* 输出参数:void
* 编写人: */
public static void getdownFile(String strTableName,
String strColumnName,
StringBuffer sbSQLWhere,
ServletOutputStream sos) throws Exception {
Connection con = null;
PreparedStatement ps = null;
ResultSet resultset = null;
try {
//得到数据库连接
con = DBConnector.getConnection();
StringBuffer sbSQL = new StringBuffer();
//构建查询语句
sbSQL.append(" SELECT " + strColumnName + " FROM " + strTableName);
sbSQL.append(sbSQLWhere);System.out.println(" sql value is:"+sbSQLWhere.toString());
ps = con.prepareStatement(sbSQL.toString());
//执行查询
resultset = ps.executeQuery();
while (resultset.next()) {
//读取数据流
InputStream is = resultset.getBinaryStream(strColumnName);byte[] buf = new byte[2048];
while(is.read(buf)!=-1) {
//把数据流按块写到servlet的输出流中
sos.write(buf);
}
}
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
} finally {
if (ps != null) {
ps.close();
}
if (resultset != null) {
resultset.close();
}
if (con!=null) {
con.close();
}
}
}