关于上传下载的问题,请高手指教。

flyteger 2005-04-23 09:27:13
小弟将图片用,jspSmartUpload组件上传到SQL Server2000 的Image字段里,
读取的时候,代码如下:
HttpSession session = req.getSession();
int contract = ((Integer) session.getAttribute("contract")).intValue();
Dbcon db = new Dbcon();
try {
Connection con = db.getcon();
Statement st = con.createStatement();
ResultSet rset = st
.executeQuery("select PHOTO from RS_APHOTO where CONTRACTID="
+ contract);
Blob content = null;
if (rset.next()) {
res.setContentType("image/jpeg");
res.setHeader("Content-Disposition",
"attachment;filename=" );
javax.servlet.ServletOutputStream out = res.getOutputStream();
content = rset.getBlob("PHOTO");
if (content != null) {
BufferedInputStream in = new BufferedInputStream(content.getBinaryStream());
BufferedOutputStream bufOut = new BufferedOutputStream(res.getOutputStream());
int n = -1;
byte buffer[] = new byte[4096];
while((n = in.read(buffer, 0, 4096)) > -1)
bufOut.write(buffer, 0, n);
//
//
in.close();
out.flush();
out.close();
} else {
res.setContentType("text/html;charset=gb2312");
PrintWriter out1 = res.getWriter();
out1.println("<html><head></head><body>");
out1.println("<h3>对不起,没有找到该页面!</h3>");
out1.println("</body></html>");
out1.flush();
System.out.println("Blob数据流读取日志:");
return;
}

}else{
res.setContentType("text/html;charset=gb2312");
PrintWriter out = res.getWriter();
out.println("<html><head></head><body>");
out.println("<h3>对不起,没有上传照片!</h3>");
out.println("</body></html>");
out.flush();
System.out.println("Blob数据流读取日志:");
return;
}
} catch (SQLException ex) {
ex.printStackTrace();
}


**********************************
提示如下错误:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported data conversion.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseData.unsupportedConversion(Unknown Source)
at com.microsoft.jdbc.base.BaseData.getBlob(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getBlob(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getBlob(Unknown Source)
at org.apache.commons.dbcp.DelegatingResultSet.getBlob(DelegatingResultSet.java:318)
at com.employee.ReadPhoto.doGet(ReadPhoto.java:64)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at web.filter.CharsetFilter.doFilter(CharsetFilter.java:31)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
************
请教怎么解决,我什么地方错了。为什么数据不能转换??
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gloomsun 2005-04-23
  • 打赏
  • 举报
回复
InputStream is = null;
final int length = 10000000;
try{
int temp[] = new int[length];
while( rs.next() ){
is = rs.getBinaryStream("Picture");
//the database i readed have the 78 bytes invalid data
//in the begin of file so i must skip it
is.skip(78);
for( int i = 0; i != length && ( temp[i]=is.read() ) != -1 ; ++i );
arrayList.add(temp);
}

}catch(Exception e){}

从数据库里读
寒舍人 2005-04-23
  • 打赏
  • 举报
回复
看你的错误提示是数据库没连接上,在你安装JDBC后的文件下,有个LIB文件夹,里面是三个JAR文件,你把LIB文件夹COPY到你的目录下的WEB-INF下。
飞行的兔子 2005-04-23
  • 打赏
  • 举报
回复
content = rset.getBlob("PHOTO");
不能用这种方法从sqlserver数据库中读取image格式的字段,你可以看看在sqlserver的驱动中,getBlob方法不被支持了!
不这样读取,在sqlserver中image类型实际上是比较大的bit形式,你可以用流的方式将这些数据读出!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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