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

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)
************
请教怎么解决,我什么地方错了。为什么数据不能转换??
...全文
73 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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形式,你可以用流的方式将这些数据读出!
好网管网吧留言本(ASP程序) 更新说明: 1、增加外部提交检测代码,防止外部提交(如有更好建议,分享); 2、增加过滤特殊字符问题,防止SQL注入。 程序说明: 1、开发环境:DreamWeaver CS3 + Asp + ACCESS,在XP SP2 + IIS 5.1版本下测试通过。 2、程序功能:发布留言,查看留言,查找留言,验证码功能(有效防止垃圾留言),IP地址记录,对留言进行回复处理,删除操作,后台修改管理员密码(密码MD5加密,不可破解),数据库防止下载。 3、其他说明:程序简单实用,操作简单,美观大方。 4、密码已经过MD5加密处理!如忘记密码,将数据库下载至本地,修改“G_man”表“密码”列内容为【7a57a5a743894a0e】,则新密码为【admin】。 5、使用说明: 本地:下载本程序解压后,运行IIS,设置好访问路径即可。 如:http://localhost/ 网络:下载本程序解压后,直接将文件夹内文件上传至空间即可(最好新建文件夹,防止覆盖网站原文件)。 地址:http://www.你的域名.com/程序所在文件夹名/ 6、程序默认用户名:admin 密码:admin 后台管理地址:a_login.asp (程序底部gxjss链接为后台管理地址) 强烈建议修改数据库文件名,并修改数据库链接文件; 修改 Connections 下 gconn 文件(可用记事本打开),修改数据库名 Server.MapPath("data/#data.asp") 中 #data.asp 为你自己的数据库文件名。 7、保留阿希正传及其链接,谢谢! 8、作者水平有限,程序如有错误或漏洞,高手指教!感激不尽!

67,549

社区成员

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

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