用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 ...
随机推荐
- ES 必备插件的安装
1. elasticsearch-head插件的安装,非常好的插件 elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通 ...
- 接触.net5年了,感觉自己的知识面很狭隘。
08年毕业找工作期间开始接触网页开发,由于在学校了混了4年时间,我只能从html标记语言开始学习,后来应聘到一个网站建设公司,开始学习ps.Dreamweaver和asp.由于基础薄弱,一个月后离开了 ...
- codeblocks调试(转载)
单步调试 1)设置断点 在需要设置断点处,右击左边行号,Add breakpoint,则出现一个红色的点(可以同时设置多个,前提是不能在debug的运行模式下). 2)调试运行 Debug-> ...
- js调用.net后台事件,和后台调用前台等方法以及js调用服务器控件的方法
http://blog.csdn.net/deepwishly/article/details/6670942 ajaxPro.dll基础教程(前台调用后台方法,后台调用前台方法) 1. javaS ...
- python的py文件打包成exe
一.首先需要安装Pyinstaller-- 使用pip来安装模块 (我电脑上装的是python的一个编译环境Anaconda,如果电脑上装的是python自带的IDE的话,就直接进入python的安装 ...
- windows 基础及基本软件测试环境搭建
- Python: 设计模式 之 工厂模式例(2)(神奇的Python)
#!/usr/bin/env python #coding=utf-8 # # 工厂模式第二例(神奇的Python) # 版权所有 2014 yao_yu (http://blog.csdn.net/ ...
- hustoj 1017 - Exact cover dancing link
1017 - Exact cover Time Limit: 15s Memory Limit: 128MB Special Judge Submissions: 5851 Solved: 3092 ...
- Codeforces 446-C DZY Loves Fibonacci Numbers 同余 线段树 斐波那契数列
C. DZY Loves Fibonacci Numbers time limit per test 4 seconds memory limit per test 256 megabytes inp ...
- Hibernate 使用HQL的 in 时要注意判断in的值(list)是否包含数据
如果你使用 HQL的 in,例如: sessionFactory.getCurrentSession() .createQuery("select hlInfo.id, count(id) ...