读取blob字段word问题

alen1985 2009-07-01 08:30:21
我在另外一台机器上可以读取显示并可以下载,而在有的机器上报错:

ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:387)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
at Servlet.WordFileServlet.doGet(WordFileServlet.java:69)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:764)
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:129)
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:570)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
... 19 more


搜索了很久,没得到很好解决!

我的代码如下:


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


//��word��blob������
byte[] buf = new byte[1024];
request.setCharacterEncoding("gbk");
int id = Integer.parseInt(request.getParameter("id"));
System.out.println(id);
String sql = "select * from fileinfo where FileID=" + id;
try {
ResultSet rSet = new DB_Conn().executeQuery(sql);
response.reset();

if(rSet.next()){
Blob blob = rSet.getBlob("FileContent");
int size =(int)blob.length();
InputStream in = blob.getBinaryStream();
String filename = rSet.getString("FileName");

response.setHeader("Content-Disposition", "attachement;filename="+filename);
response.setContentType("application/msword;charset=GBK");
ServletOutputStream outputStream = response.getOutputStream();
int byteRead=0;

while((byteRead=in.read(buf))!=-1){
//outputStream.write(buf);
outputStream.write(buf, 0, byteRead);
}
outputStream.flush();
outputStream.close();
}

} catch (Exception e) {
e.printStackTrace();
}

}

...全文
172 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
caoxiaohong 2009-07-03
  • 打赏
  • 举报
回复
public static boolean getBlobFile(InputStream in,String sFullName) {

File file = new File(sFullName);
RandomAccessFile rFile = null;
try {
rFile = new RandomAccessFile(file, "rw");
rFile.seek(0);
byte bytes[] = new byte[1024];
int ch = 0;
while ((ch = in.read(bytes)) != -1)
rFile.write(bytes, 0, ch);
rFile.close();
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}

给你个方法:
in是库中取出的字节流,fullname是生成WORD文档保存的路径。
老紫竹 2009-07-03
  • 打赏
  • 举报
回复
或者,你没有设置
con.setAutoCommit(false);
启动事务
老紫竹 2009-07-03
  • 打赏
  • 举报
回复
呵呵,blog要在事务里才能读取。我估计你的
new DB_Conn().executeQuery(

已经在执行完毕后,把连接给关闭了吧!事务也就没有了!
网络精灵 2009-07-02
  • 打赏
  • 举报
回复
把response.reset();去掉试试,这句一般在jsp用的多,因为jsp每个<%%>会生成空行,servlet一般没必要。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧