`
bluetaoren
  • 浏览: 74586 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jsp页面显示数据库中的二进制保存的图片及下载

    博客分类:
  • java
阅读更多

上传一张图片,以Blob的形式保存进数据库。保存进之后如何在页面显示这张图片呢?

废话少说,直接上代码。

jsp页面代码:

<img src="/webusermng/userh/showuserhbusinesslicense.do?hbusinesslicenseId=<%=userHBusinessLicense[0][1]%>" width="77" height="93" style="cursor: pointer;" onmouseover="javascript:document.getElementById('divimglicense').style.display='';" onmouseout="javascript:setTimeout(function(){document.getElementById('divimglicense').style.display='none'}, 1000);"/>

 

对了,你猜对了。其实就是一个image的src请求:

<img src="/webusermng/userh/showuserhbusinesslicense.do?hbusinesslicenseId=<%=userHBusinessLicense[0][1]%>" />

 

后台如何处理呢?

private ActionForward showUserHBusinessLicense(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws BizException
{
        String hbusinesslicenseId = request.getParameter("hbusinesslicenseId");
        
        if(hbusinesslicenseId == null || "".equals(hbusinesslicenseId))
        {
            throw new BizException("营业执照编号不正确!");
        }
        try
        {
            Web_file web_file = serviceLocator.getUserHService().queryHBusinessLicenseImage(Integer.valueOf(hbusinesslicenseId));
            if(web_file != null)
            {
                byte[] buf = web_file.getUpf_context();// 获取Blob字节数组
                response.setContentType(web_file.getUpf_contexttype());
                OutputStream hblicense = response.getOutputStream();// 获取输出流
                for(int i = 0; i < buf.length; i++)
                {
                    hblicense.write(buf[i]);// 输出到页面
                }
                hblicense.close();// 关闭输出流
            }
            return null;
        }
        catch(Exception e)
        {
            e.printStackTrace();
            return null;
        }
}

 

这儿最主要的就是流的读出:

OutputStream hblicense = response.getOutputStream();// 获取输出流
for(int i = 0; i < buf.length; i++)
{
     hblicense.write(buf[i]);// 输出到页面
}
hblicense.close();// 关闭输出流

看一看serivce的queryHBusinessLicenseImage实现层如何处理的

public Web_file queryHBusinessLicenseImage(Integer upf_id) throws BizException
{
        SQLHelper sqlExec = new SQLHelper(false);
        Web_file web_file = null;
        try
        {
            sqlExec_lietou.beginTrans();
            web_file = new Web_file();
            web_file.setUpf_id(upf_id);
            web_file = (Web_file) ORMHelper.getObjectByPK(sqlExec, web_file);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            sqlExec_lietou.close();
        }
        return web_file;
}

 

呵呵,很简单吧!

 

另外一种上传附件,下载另存为附件的方法。

@RequestMapping(value = "/downloadcandidateannex/", method = RequestMethod.GET)
    public void downLoadCandidateAnnex(HttpServletRequest request, HttpServletResponse response) throws Exception
    {
        Integer userh_id = this.getCurrentUserId(request);
        if(userh_id == null || userh_id <= 0)
        {
            throw new BizException("用户编号不正确!");
        }
        String webfileId = request.getParameter("webfileId");
        WebFileForm webFileForm = serviceFactory.getPcdetailService().getCandidateAnnex(userh_id, webfileId);
        response.setContentType("application/x-msdownload");
        try
        {
            String fileName = new String(webFileForm.getWeb_file().getUpf_filename().getBytes("gbk"), "ISO-8859-1");
            response.setHeader("Content-Disposition", "attachment;" + " filename=" + fileName);
            InputStream ips = serviceFactory.getMongoDBService().getFileInputStream(IMongoDBService.TABLE_WEB_FILE, Integer.valueOf(webfileId));
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int b = 0;
            while((b = ips.read()) != -1)
                baos.write(b);
            
            response.getOutputStream().write(baos.toByteArray());
        }
        catch(Exception e)
        {
            throw new BizException("文件下载出错!", e);
        }
    }

  一:设置下载头信息response.setContentType("application/x-msdownload");

 二:获取文件流,读出

InputStream ips = serviceFactory.getMongoDBService().getFileInputStream(IMongoDBService.TABLE_WEB_FILE, Integer.valueOf(webfileId));
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int b = 0;
            while((b = ips.read()) != -1)
                baos.write(b);
            
            response.getOutputStream().write(baos.toByteArray());
分享到:
评论
3 楼 xurichusheng 2014-11-05  
Z_408 写道
这个可以的,你不妨试试。
Action中代码:
public String displayImage(){
String sql = "SELECT empHeadImg,empHeadImgName FROM t_personal WHERE id= " + employeeId;
PreparedStatement ps = null;
ResultSet rs = null;
InputStream is = null;
OutputStream os = null;
try {
Class.forName(driverClassName);
Connection conn = DriverManager.getConnection(url, username,password);
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
Blob blob = rs.getBlob("empHeadImg");
is = blob.getBinaryStream();
HttpServletResponse response = this.getResponse();
response.setContentType("image/jpeg");
os = response.getOutputStream();
int num = (int) blob.length();
byte buf[] = new byte[num];
while ((num = is.read(buf)) != -1) {
os.write(buf);
}
}
}catch(Exception e){
e.printStackTrace();
}
return null;
}
jsp中代码:
<img width="130" height="172" src="displayImage.action?employeeId=${employeeDetails.employeeId }"/>


使用2楼Z_408 的方法可以显示图像
2 楼 Z_408 2012-12-25  
这个可以的,你不妨试试。
Action中代码:
public String displayImage(){
String sql = "SELECT empHeadImg,empHeadImgName FROM t_personal WHERE id= " + employeeId;
PreparedStatement ps = null;
ResultSet rs = null;
InputStream is = null;
OutputStream os = null;
try {
Class.forName(driverClassName);
Connection conn = DriverManager.getConnection(url, username,password);
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
Blob blob = rs.getBlob("empHeadImg");
is = blob.getBinaryStream();
HttpServletResponse response = this.getResponse();
response.setContentType("image/jpeg");
os = response.getOutputStream();
int num = (int) blob.length();
byte buf[] = new byte[num];
while ((num = is.read(buf)) != -1) {
os.write(buf);
}
}
}catch(Exception e){
e.printStackTrace();
}
return null;
}
jsp中代码:
<img width="130" height="172" src="displayImage.action?employeeId=${employeeDetails.employeeId }"/>
1 楼 hesai_vip 2012-07-25  
请问有上传图片到BLOB的例子么

相关推荐

    查询mysql数据库中的二进制图片数据,并全部显示出来

    在MySQL数据库中存储二进制大对象(BLOB)数据,如图片,是常见的做法,因为这种方式便于管理和检索。在本示例中,我们将探讨如何查询包含二进制图片数据的MySQL数据库,并通过JSP(JavaServer Pages)展示这些图片...

    图片直接保存到数据库,并在JSP页面显示

    标题“图片直接保存到数据库,并在JSP页面显示”涉及的知识点主要集中在Web开发领域,尤其是Java Web开发,包括图片处理、数据库存储以及前端展示。这里我们将深入探讨以下几个关键环节: 1. 图片数据的二进制化:...

    jsp显示数据库图片

    在这里,我们将创建一个Servlet来从数据库中读取图片的二进制数据,并将其转化为适合在网页上显示的形式。 3. **MySQL**:MySQL是一个广泛使用的开源关系型数据库管理系统,可以存储各种类型的数据,包括图片的二...

    struts1上传图片,保存数据库,再显示jsp页面

    在“struts1上传图片,保存数据库,再显示jsp页面”这个场景中,我们将探讨如何利用Struts1实现文件上传,将图片数据保存到数据库,并在JSP页面上展示。 1. **Struts1的文件上传组件**: Struts1并不直接支持文件...

    jsp 上传图片并保存到数据库里的servlet代码和jsp代码

    在图片上传场景中,JSP页面通常作为用户界面,收集用户上传的图片,然后通过表单提交到Servlet进行处理。 1. **JSP代码**: JSP页面中,我们需要一个表单来让用户选择要上传的图片。表单需要设置`enctype=...

    jsp+jspsmartupload控件上传图片至数据库

    通常,图片数据会被转化为二进制流(BLOB,Binary Large Object)存储在数据库中。 6. **上传过程**: - 用户在前端JSP页面上选择图片并提交表单。 - jspsmartupload控件捕获提交事件,处理文件数据。 - 数据...

    JSP在数据库中存取图片

    然后,从请求中获取用户的输入信息,并将文件数据转换为二进制流,最终通过PreparedStatement执行SQL插入操作,将图片数据存储到数据库的`ImageData`字段中。 #### 五、总结 通过以上步骤,我们可以实现一个完整的...

    JSP实现将图片上传到数据库

    - **数据库存储**:将文件内容以二进制大对象(BLOB)的形式存储在数据库中,虽然可能降低数据库处理效率,但提高了安全性。 3. **文件上传组件**: - **jspSmartUpload** 和 **Apache common-fileupload** 是两...

    Struts1 上传二进制流

    在这个方法里,我们需要解析请求中的文件内容,将二进制流保存到服务器的磁盘上,或者存储到数据库中。 在Struts1中,使用`Commons FileUpload`库可以方便地处理文件上传。首先,需要在`struts-config.xml`配置文件...

    jsp页面显示中文乱码解决.rar

    本主题聚焦于“jsp页面显示中文乱码解决”,这是一个典型的问题,许多开发者在处理包含中文字符的JSP页面时可能会遇到。让我们深入探讨这个问题,并提供一系列解决方案。 1. **字符编码基础** - **字符集与编码**...

    jsp图片插入数据库并读出页面

    通常,我们使用的方法是将所要显示的图片存在特定的目录下,在数据库中保存相应的图片的名称,在 JSP 中建立相应的数据源,利用数据库访问技术处理图片信息。但是,如果我们想动态地显示图片,上述方法就不能满足...

    用Jsp上传图片到数据库

    4. **将图片保存到数据库**:对于图片的存储,常见的做法是将其转换为二进制数据,然后存储到数据库的BLOB(Binary Large Object)字段。Java提供了`java.sql.Connection`、`PreparedStatement`等接口来执行SQL语句...

    jsp+servlet+oracle上传图片到数据库(非路径)

    1. **用户界面**:在JSP页面中,使用`&lt;input type="file"&gt;`元素让用户选择要上传的图片,然后通过表单提交到Servlet。 2. **Servlet处理**:Servlet接收到请求后,解析请求的输入流,获取到图片的字节数据。 3. **...

    图片存入mySql数据库.pdf

    从给定的文件信息来看,内容涉及了如何在MySQL数据库中存储图片数据的技术细节,以及相关的JSP页面和Java代码实现。接下来将详细说明这些知识点。 首先,文件中提到了创建数据库表的SQL语句,用于存储图片数据。...

    java中图片上传并在jsp页面显示.txt

    ### Java中的图片上传并在JSP页面显示 #### 知识点概述 本篇文章将详细介绍如何在Java项目中实现图片的上传功能,并将其显示在JSP页面上。这涉及到多个技术点,包括使用`commons-fileupload`组件处理文件上传、...

    图片写到数据库及上传下载案例

    首先,"图片写到数据库"指的是将图片转换为二进制数据,然后存储到数据库中。在传统的Web应用中,通常会选择关系型数据库如MySQL或Oracle来存储这种类型的数据。图片的二进制内容可以作为BLOB(Binary Large Object...

    图片存入数据库 图片 数据库

    在IT领域,存储图像等非结构化数据在数据库中是一项常见的需求。本示例展示了如何使用JSP(Java...同时,对于Oracle数据库,`LONG RAW`类型在Oracle 12c及以后的版本中已被弃用,推荐使用BLOB类型来存储二进制大对象。

    jsp文件上传到数据库里例子下载

    2. **imgblob.sql**:这个名字暗示可能是一个SQL脚本,用于创建或初始化一个数据库表,该表可能用于存储二进制大对象(BLOB),即上传的文件内容。 3. **中国java下载站.url**:这可能是一个书签文件,指向一个Java...

    struts下上传图片到数据库并显示到页面实例

    在这个实例中,我们将探讨如何在Struts框架下实现图片的上传功能,将图片保存到数据库,并在页面上显示出来。 首先,我们需要创建一个Action类来处理用户上传的图片。这个Action类通常会包含一个方法,如`execute()...

Global site tag (gtag.js) - Google Analytics