用Seam实现:图片上传 + 保存到数据库 + 从数据库读出图片并显示到页面中
上传图片并保存到数据库
<filter>
<filter-name>Seam Filter</filter-name>
<filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
</filter> <filter-mapping>
<filter-name>Seam Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
s:fileUpload 标签主要属性:
- data: 需绑定一个byte[] 数组,用来接收上传的二进制数据.
- fileName: 上传文件的文件名
- accept: 允许上传的文件类型,可取 "images/png", "images/jpg".
<h:form enctype="multipart/form-data" id="upload-form">
<s:fileUpload data="#{memberHome.instance.avator}" fileName="#{memberHome.fileName}" />
<h:commandButton value="上传照片" action="#{memberHome.update()}"
styleClass="btn btn-primary btn-small">
</h:commandButton>
</h:form>
这里 avator 是一个byte[]数组,fileName是一个String对象.
注意必须在form中使用 "multipart/form-data" 的编码类型.
从数据库中读出图片并在页面中显示
private DataSource getDS() throws NamingException {
Context context = new InitialContext();
return (DataSource) context.lookup("zhiduiDatasource");
}
lookup()中要传递你要查询的对象的名称,即在persistence.xml中<jta-data-source>节点所声明的数据源.有关JNDI的详细说明,参见Oracle官方指南:
http://docs.oracle.com/javase/7/docs/technotes/guides/jndi/
private void getImageByte() {
DataSource ds = null;
Connection conn = null;
try {
ds = getDS();
conn = ds.getConnection();
Statement stat = conn.createStatement();
ResultSet res = stat.executeQuery("select * from member where id='" + memberId + "'");
while(res.next()) {
imageByte = res.getBytes("avator_file");
}
} catch(SQLException ex) {
ex.printStackTrace();
} catch(NamingException ex) {
ex.printStackTrace();
} finally {
try {
conn.close();
} catch(SQLException ex) {
ex.printStackTrace();
}
}
}
最后在doGet()方法中将读出的byte[]数据返回:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String parm = req.getParameter("memberId");
memberId = Integer.parseInt(parm); getImageByte();
resp.getOutputStream().write(imageByte, 0, imageByte.length);
}
别忘了在web.xml中声明你的ImageServer并配置URL映射:
<servlet>
<servlet-name>Image Servlet</servlet-name>
<servlet-class>cn.edu.sudt.zhidui.servlet.ImageServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>Image Servlet</servlet-name>
<url-pattern>*.showimg</url-pattern>
</servlet-mapping>
这时使用<img>标签就能成功地将图片显示到页面中了.
<img src="asd.showimg?memberId=#{memberHome.instance.id}" />用Seam实现:图片上传 + 保存到数据库 + 从数据库读出图片并显示到页面中的更多相关文章
- kindeditor扩展粘贴图片功能&修改图片上传路径并通过webapi上传图片到图片服务器
前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功 ...
- kindeditor扩展粘贴截图功能&修改图片上传路径并通过webapi上传图片到图片服务器
前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功 ...
- html + js 实现图片上传,压缩,预览及图片压缩后得到Blob对象继续上传问题
先上效果 上传图片后(设置了最多上传3张图片,三张后上传按钮消失) 点击图片放大,可以使用删除和旋转按钮 (旋转功能主要是因为ios手机拍照后上传会有写图片被自动旋转,通过旋转功能可以调正) html ...
- 本地图片上传到GitHub,MarkDown使用Github图片地址
最近在学习用markdown编辑器,我是直接用有道云笔记编辑的,感觉真的好好用,编辑了一半的博客,可以按样式保存在云笔记中,我再也不会忘记写博客了~~ 但是在编辑博客的时候发现了一个问题,那就是本地图 ...
- Thinkphp5+plupload图片上传功能,支持实时预览图片。
今天和大家分享一个国外的图片上传插件,这个插件支持分片上传大文件.其中著名的七牛云平台的jssdk就使用了puupload插件,可见这个插件还是相当牛叉的. 这个插件不仅仅支持图片上传,还支持大多数文 ...
- vue 实现图片上传与预览,以及清除图片
vue写原生的上传图片并预览以及清除图片的效果,下面是demo,其中里面有vue获取input框value值的方法以及vue中函数之间的调用 <!DOCTYPE html> <htm ...
- ssm框架实现图片上传显示并保存地址到数据库
本案例是通过springmvc+spring+mybatis框架以商品上传为例,实现的图片上传功能,并把图片的地址保存到数据库并在前台显示上传的图片. 本项目是使用maven搭建的项目,首先看下项目结 ...
- JS图片上传预览插件制作(兼容到IE6)
其实,图片预览功能非常地常见.很意外,之前遇到上传图片的时候都不需要预览,也一直没有去实现过.现在手上的项目又需要有图片预览功能,所以就动手做了一个小插件.在此分享一下思路. 一.实现图片预览的一些方 ...
- springMVC框架下——通用接口之图片上传接口
我所想要的图片上传接口是指服务器端在完成图片上传后,返回一个可访问的图片地址. spring mvc框架下图片上传非常简单,如下 @RequestMapping(value="/upload ...
随机推荐
- Java之字符串学习
java中String的使用十分频繁,是我们要学习的重点,在说String之前,我们要知道堆跟栈的区别. java中的数据类型分原生数据类型(primitived types)有八种(byte,cha ...
- /etc/fstab一些信息
[root@shine shine]# vim /etc/fstab ## /etc/fstab# Created by anaconda on Thu May 9 13:29:35 2013## A ...
- 配置并学习微信JS-SDK(2)—图片接口
测试地址:http://www.qq210.com/shoutu/android 检查图像接口 选择本地或拍照的图片 上传选择的图片 预览上传的图片 //1.检查图像接口 document.query ...
- python包管理器pip
步骤一:下载pip包 https://pypi.python.org/pypi/pip 步骤二:安装pip包 解压后,到pip包目录执行: python setup.py install 步骤三:添加 ...
- 一个简单的webservice调用
我们先创建一个简单空web应用程序 然后添加新建项目 //我们创建一个peson对象,产生数据标识返回 using System; using System.Collections.Generic; ...
- BASLER 镜头选型白皮书
本文翻译自Basler镜头选型白皮书 有许多方法来进行镜头选型.本文将会讨论其中的指导原则,以帮助你在项目中选择合适的镜头.我们将讨论许多镜头的基本概念,比如镜头接口.图像大小.放大率.焦距.F数和光 ...
- JS模块加载器加载原理是怎么样的?
路人一: 原理一:id即路径 原则.通常我们的入口是这样的: require( [ 'a', 'b' ], callback ) .这里的 'a'.'b' 都是 ModuleId.通过 id 和路径的 ...
- 【关于JavaScript】自动计算的实例
在一些贸易业务Web系统中,某些页面需要提供实时的辅助计算功能,例如:员工录入货物的单价和数量的值,通过JavaScript的事件处理可以直接显示出总价. 如下图所示就是本例的运行效果图: 本例中也采 ...
- 消息队列msmq
http://q.cnblogs.com/q/26895/ 远程队列必须现在运程服务器上创建. 在 Windows Server 2008 上安装 IIS 服务和 MSMQ 功能后,系统会在 IIS ...
- jquery学会的
1.$("#id") $("xxxxx") (input, body) $(".class") 2. $("#id xxx ...