用户提出的把所有上传文件存储到数据库中,思路很好,我也想这么实现,可是公司目前没有现成的解决方案。
今天找了一些资料,进行可行性研究,
目前,只用于下载文件没有问题,图片,flash,rm ,wma 等文件需要在线文本编辑器中直接显示就成问题了。
网上找的代码,可用于图片文件的显示,后来试了一下,flash文件也可以,目前媒体文件没有找到解决方案,有好的建议的朋友可以发邮件给我xuechongjie@163.com,或者直接留言。
<%@ page contentType="text/html; charset=gbk"%>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*,javax.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.math.*"%>
<%
String strTID=request.getParameter("TID");
String username, password, url;
//oracle连接
username = "gjnew";
password = "gjnew";
url = "jdbc:oracle:thin:@localhost:1521:orcl";
Connection con = DriverManager.getConnection(url, username,password);
try {
Statement stmt = con.createStatement();
String sql = "select attfiile from attach0 where attid='"+strTID+"' ";
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()){
oracle.sql.BLOB b = (oracle.sql.BLOB) rs.getBlob("attfiile");
long size = b.length();
byte[] bs = b.getBytes(1, (int) size);
response.setContentType("image/jpeg");
OutputStream outs = response.getOutputStream();
outs.write(bs);
outs.flush();
rs.close();
} else {
rs.close();
}
} finally {
con.close();
}
%>
图片调用:
<IMG SRC="showblobpic.jsp?TID=1234567890" WIDTH="2048" HEIGHT="1536" BORDER="0" ALT="">
FLASH调用:
与图片类似,flsh的src的地址换成showblobpic.jsp?TID=1234567890就行
用于直接下载文件的JSP :showblobpic.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="GBK"%>
<%@page import="java.util.*,
java.sql.*,
javax.sql.*,
java.io.*,com.fsm.db.*,
oracle.jdbc.driver.OracleResultSet,
oracle.sql.BLOB"
%>
<%
//request.setCharacterEncoding("GBK");
DBService dbservice = new DBService();
Connection conn ;
BLOB blob = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "gjnew", "gjnew");
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
String tttttt=(String)request.getParameter("filename");
String sqlselect="select attfiile from attach0 where attid='"+request.getParameter("TID")+"'";
ResultSet rset = stmt.executeQuery(sqlselect);
while (rset.next()) {
blob = ((OracleResultSet) rset).getBLOB(1);
System.out.println(blob.length());
}
ServletOutputStream sout = response.getOutputStream();
InputStream blob_in = blob.getBinaryStream();
int temp;
response.setContentType("application/x-msdownload");
response.setHeader("Content-disposition","attachment; filename="+(String)request.getParameter("filename"));
while((temp=blob_in.read())!=-1)
sout.write(temp);
sout.close();
blob_in.close();
conn.commit();
%>