救命呀!关于从数据库读取Word文档(BLOB)在JSP页面显示
zlgun 2002-08-29 07:23:29 页面输出乱码,但文件写入正确。(运行环境:WebLogic6.1+Jdk1.3.1+WinXP)
<%@ page language="java" import="java.sql.*,java.util.*"%>
<%
String image_id ="2" ;
int imglen=0;
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@89.0.0.224:1521:bi";
//orcl为你的数据库的SID
String user="system";
String password="manager";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select test from tab_test1 where id=2");
if (rs.next())
{
oracle.sql.BLOB m_blob=(oracle.sql.BLOB) rs.getBlob(1);
int length=(int) m_blob.length();
imglen=length;
BufferedInputStream bis=new BufferedInputStream(m_blob.getBinaryStream());
byte[] l_buffer = new byte[1024];
int l_nbytes = 0;
response.setContentType("application/msword");
javax.servlet.ServletOutputStream op = response.getOutputStream();
File newfile=new File("d:/new.doc");
FileOutputStream nn=new FileOutputStream(newfile);
while ((l_nbytes = bis.read(l_buffer)) != -1) {
op.write(l_buffer,0, l_nbytes);
nn.write(l_buffer,0, l_nbytes);
}
op.close();
nn.close();
}
System.out.println("文档长度:"imglen);
rs.close();
stmt.close();
conn.close();
}
catch(Exception e) {
System.out.println(imglen);
System.out.println(e.getMessage());
}
%>
同时控制台提示如下:
文档长度:120832
Connection reset by peer: socket write error
<2002-8-29 下午06时59分25秒> <Error> <HTTP> <Connection failure
java.net.SocketException: ReadFile failed: ??¨??????????????á?
(error 64, fd 2064)
at weblogic.socket.NTSocketMuxer.initiateIO(Native Method)
at weblogic.socket.NTSocketMuxer.read(NTSocketMuxer.java:407)
at weblogic.servlet.internal.MuxableSocketHTTP.requeue(MuxableSocketHTTP
.java:231)
at weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImp
l.java:977)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:1964)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:137)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
>