用ssh写的一个存储图片的程序,报了一个错,看大家有什么好的解决方法
2012-11-01 16:02
260 查看
一般网站在处理用户上传图片时通常采用两种策略:一是直接把图片存入数据库中的Blob字段;二是数据库中只存储图片的在服务器上的路径信息 ,图片存放在分门别类的文件中,使用的时候从数据库读取路径信息到页面img元素即可.在此不讨论两种方案的优劣,我只是写了个hibernate的例子 来实现第一种策略.例子很简单,photo表用photos存储图片,photo字段类型为Blob.在此例中数据库我采用 mysql。
这个是我的Photo.cfg.xml文件
<hibernate-mapping>
<class name="com.duqiao.channel.domain.PhotoDomain" table="PHOTO"
lazy="false">
<id name="id" column="ID" type = "int">
<generator class="native"/>
</id>
<property name="userId" column="userId " />
<property name="channelId" column="channelId" />
<property name="level" column="level" />
<property name="refreshTime" column="refreshTime" />
<property name="title" column="title" />
<property name="photos" column="photos" type="java.sql.Blob"/>
<property name="rsg1" column="rsg1" />
<property name="rsg2" column="rsg2" />
<property name="rsg3" column="rsg3" />
<property name="createtime" column="createtime" />
<!-- <property name="acreatTime" column="acreatTime" />
<set name="topics">
<key column="articleId"/>
<one-to-many class="com.duqiao.channel.domain.TopicDomain"/>
</set>-->
</class>
</hibernate-mapping>
这个是我存储图片的代码
PhotoDomain photo = new PhotoDomain();
UserDomain domain = (UserDomain) session.get("user");
FileInputStream in = new FileInputStream(getPhotos().toString());
Blob insertphoto = Hibernate.createBlob(in);
photo.setPhotos(insertphoto);
photo.setTitle(getTitle());
photo.setRefreshTime(TimeUtil2.getCurrDate());
photo.setUserId(domain.getId());
photo.setLevel(0);
photo.setRsg1("");
photo.setRsg2("");
photo.setRsg3(0);
photo.setCreatetime(TimeUtil2.getCurrDate());
this.photoService.add(photo);
这个是我查询后返回到页面的代码:
phototes = this.photoService.findAllPhoto();
int size = phototes.size();
Blob photoMain = phototes.get(size - 1).getPhotos();
InputStream into = null;
OutputStream out = null;
try {
into = photoMain.getBinaryStream();
out = response.getOutputStream();
byte[] buf = new byte[1024];
int len;
while ((len = into.read(buf)) != -1) {
out.write(buf, 0, len);
}
out.close();
out.flush();
} catch (java.io.IOException e) {
e.printStackTrace();
} catch (java.lang.IllegalStateException ie) {
ie.printStackTrace();
} catch (java.lang.NullPointerException le) {
le.printStackTrace();
} finally {
in.close();
}
return "success";
图片能正常显示到页面但是,后台报个错java.lang.IllegalStateException: getOutputStream() has already been called for this response
我也上网查了说是这个是两个方法冲突了,在jsp页面后面加上<%=out.clear());out=pageContext.pushBody();%>,并把<%=%>中的空格去了就ok了,但是我的这段输代码是在java中写的,谢了这个也并不好用,看看哪位大牛能帮上忙。
这个是我的Photo.cfg.xml文件
<hibernate-mapping>
<class name="com.duqiao.channel.domain.PhotoDomain" table="PHOTO"
lazy="false">
<id name="id" column="ID" type = "int">
<generator class="native"/>
</id>
<property name="userId" column="userId " />
<property name="channelId" column="channelId" />
<property name="level" column="level" />
<property name="refreshTime" column="refreshTime" />
<property name="title" column="title" />
<property name="photos" column="photos" type="java.sql.Blob"/>
<property name="rsg1" column="rsg1" />
<property name="rsg2" column="rsg2" />
<property name="rsg3" column="rsg3" />
<property name="createtime" column="createtime" />
<!-- <property name="acreatTime" column="acreatTime" />
<set name="topics">
<key column="articleId"/>
<one-to-many class="com.duqiao.channel.domain.TopicDomain"/>
</set>-->
</class>
</hibernate-mapping>
这个是我存储图片的代码
PhotoDomain photo = new PhotoDomain();
UserDomain domain = (UserDomain) session.get("user");
FileInputStream in = new FileInputStream(getPhotos().toString());
Blob insertphoto = Hibernate.createBlob(in);
photo.setPhotos(insertphoto);
photo.setTitle(getTitle());
photo.setRefreshTime(TimeUtil2.getCurrDate());
photo.setUserId(domain.getId());
photo.setLevel(0);
photo.setRsg1("");
photo.setRsg2("");
photo.setRsg3(0);
photo.setCreatetime(TimeUtil2.getCurrDate());
this.photoService.add(photo);
这个是我查询后返回到页面的代码:
phototes = this.photoService.findAllPhoto();
int size = phototes.size();
Blob photoMain = phototes.get(size - 1).getPhotos();
InputStream into = null;
OutputStream out = null;
try {
into = photoMain.getBinaryStream();
out = response.getOutputStream();
byte[] buf = new byte[1024];
int len;
while ((len = into.read(buf)) != -1) {
out.write(buf, 0, len);
}
out.close();
out.flush();
} catch (java.io.IOException e) {
e.printStackTrace();
} catch (java.lang.IllegalStateException ie) {
ie.printStackTrace();
} catch (java.lang.NullPointerException le) {
le.printStackTrace();
} finally {
in.close();
}
return "success";
图片能正常显示到页面但是,后台报个错java.lang.IllegalStateException: getOutputStream() has already been called for this response
我也上网查了说是这个是两个方法冲突了,在jsp页面后面加上<%=out.clear());out=pageContext.pushBody();%>,并把<%=%>中的空格去了就ok了,但是我的这段输代码是在java中写的,谢了这个也并不好用,看看哪位大牛能帮上忙。
相关文章推荐
- 写了一个程序,但是引用了大量的static变量和全局变量,有什么好的方法解决?
- nwiz.exe是什么进程 出现程序错误的解决方法
- 图片压缩处理的一个可行解决方法【OC】
- 利用swt中的一个获取图片的类SwingResourceManager 来解决将程序打为jar后图片找不着的问题
- 使用Tessnet2_32.dll报未能加载文件或程序集或它的某一个依赖项。试图加载格式不正确的程序解决方法
- 用abort函数主动让进程abort/coredump, 有什么用处?------曾用此方法解决过一个低概率开机卡死的问题
- Linux中写一个已被关闭的套接字时程序终止的解决方法
- 卸载时候出现: windows installer 程序有问题。此安装需要的dll不能运行 的一个解决方法
- Eclipse下导出java程序可执行的jar包图片无法显示问题的一种解决方法
- opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类
- 关于Drawable资源被用在多个地方显示图片时,改变其中一个实例的状态会同时作用到其他实例的解决方法
- Qt程序在ARM板上无法显示JPG格式图片的解决方法
- 一个关于“OLE DB 提供程序 'sqloledb' 指出该对象中没有任何列”错误的解决方法
- ssh中断导致远端程序运行终止的原理及解决方法
- IE6图片加载的一个BUG解决方法
- WinXP找不到音量控制程序有什么简单的解决方法
- VS2013报错 error MSB8031解决方法 今天跑了一个mfc的程序,发现报错:error MSB8031: Building an MFC project for a non-U
- 关于一个常被大家遗忘的方法解决频繁操作 dom节点引起页面回流
- xcode5中如何去掉ARC?难道必须用吗?大家有没有什么解决方法呢?
- java__晓萌最近在做一个翻转图片的应用,你可能也知道,图片其实是由一个个的点组成的。于是,晓萌想先做一个可以翻转矩阵的程序,来解决他问题的核心部分。