`
zgh207
  • 浏览: 7813 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

ssh上传图片

阅读更多
hibernate映射文件:

xml 代码
<class name="com.yourcompany.vo.Fileload" table="FILELOAD" schema="TEST">  
        <id name="id" type="integer">  
            <column name="ID" precision="22" scale="0" />  
            <generator class="increment" />  
        </id>  
        <property name="fileload" type="org.springframework.orm.hibernate3.support.BlobByteArrayType">  
            <column name="FILELOAD" />  
        </property>  
        <property name="filename" type="string">  
            <column name="FILENAME" length="50" />  
        </property>  
    </class>  
spring配置文件
xml 代码
  <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" lazy-init="true">  
   bean>  
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">  
  <property name="nativeJdbcExtractor">  
   <ref local="nativeJdbcExtractor" />  
  property>  
bean>  
将lobHandle注入到sessionFactory中

xml 代码
<bean id="mysessionFactory"  
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <property name="dataSource">  
            <ref bean="dataSource" />  
        property>  
        <property name="lobHandler">  
         <ref local="lobHandler"/>  
        property>    
          
在使用struts+spring+hibernate的开发中,有些时候用户会有数据库存储文件的需求,在数据库中一般会采用
Blob字段或Clob字段来存储二进制图片、流媒体或文件。现就将在实际开发中遇到的问题及解决方法告之。

一、问题需求:

1.在持久化类中字段该用什么类型?
2.在Struts中文件对应的数据类型是什么?
3.在Hibernate中字段对应的类型是什么?
4.如何在Spring中处理这些文件?

二、解决方法:

1.在数据库中这些文件最终是以字节的形式存储二进制对象,所以在持久化类中将相应的属性定义为byte[]类型。

2.在Struts中可以使用<html:file property="" />标签来上传文件,所以与之对应的ActionForm的属性类型为:
FormFile(org.apache.struts.upload.FormFile)类型,即使是使用了动态Form同理也是使用该类型.
提示:同时要将form标签修改为<html:form action="/Action.do" method="post" enctype="multipart/form-data">
以支持文件上传后取得上传数据。在给持久对象赋值时只需调用(FormFile) form.get("property")).getFileData();
方法即可返回byte[]。

3.在Hibernate中文件列对应的类型可以是org.springframework.orm.hibernate3.support.BlobByteArrayType,
org.springframework.orm.hibernate3.support.ClobStringType、clob、blob、binary。什么时候用BlobBYteArrayType
什么时候用ClobStringType?一般如果要处理的对象是数据库字段类型是blob时(主要是图片,二进制对象等),
映射文件设置为:org.springframework.orm.hibernate3.support.BlobByteArrayType 数据库字段是clob(大文本对象)
类型时,要将java的属性的类型定为String,映射文件设置为: org.springframework.orm.hibernate3.support.ClobStringType。

4.如果在spring上要使用Struts中自带的上传功能必须在spring的配置文件中加以声明.否者将会出现?
簀ava.lang.IllegalStateException: No LobHandler found for configuration - lobHandler property
must be set on LocalSessionFactoryBean异常。配置如下:

(1).声明一个处理句柄:
  <bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
(2).在sessionFactory中注入lobHandler:
  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          <property name="lobHandler" ref="lobHandler"/>
  </bean>

提示: 指定lobHandler时,对于MySQL、DB2、MS SQL Server、Oracle 10g,使用DefaultLobHandler即可,而Oracle 9i,
则可以使用OracleLobHandler。因为Oracle9i处理lob的方式和不太一样,所以这里要用spring提供的SimpleNativeJdbcExtractor.处理Oracle9i lob类型的特殊声明:

<bean id="nativeJdbcExtractor" lazy-init="true"  class="org.springframework.jdbc.support.nativejdbc.
SimpleNativeJdbcExtractor"/>

<bean id="lobHandler" lazy-init="true"   class="org.springframework.jdbc.support.lob.OracleLobHandler">
        <property name="nativeJdbcExtractor">
            <ref bean="nativeJdbcExtractor"/>
        </property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  
<!-- 为处理Blob类型字段的句柄声明 -->
<property name="lobHandler">
  <ref local="lobHandler" />
</property>
</bean>

同时还应该使用对应的JDBC驱动。

Clob字段定义:<property name="属性名" column="列名" type="org.springframework.orm.hibernate.support.ClobStringType"
length="1048"/>这里的length是指字节,最大可以到2G.该字段在java对象中声明为String类型。

     如果使用的是mysql数据库其默认的上传文件大小只有1047552字节:如果上传的文件大于1047552字节则会出现异常
org.springframework.jdbc.UncategorizedSQLException: You can change this value on the server by setting
the max_allowed_packet' variable.根据提示可以修改mysql数据库的max_allowed_packet属性大小。
打开my.ini文件中找到# SERVER SECTION后在port=3306下面加上max_allowed_packet=?M 修改完后重启mysql服务即可成功上传。



显示图片

public ModelAndView showImage(HttpServletRequest request, HttpServletResponse response) throws Exception {<o:p></o:p>

       String dsbh = (String) request.getParameter("dsbh");<o:p></o:p>

       Integer idsbh = new Integer(dsbh);<o:p></o:p>

       TDs tds = tdsdao.get(idsbh);<o:p></o:p>

       //显示照片。<o:p></o:p>

       streamImage(tds.getZp(), response.getOutputStream());<o:p></o:p>

       return null;<o:p></o:p>

    }<o:p></o:p>

public void streamImage(final byte[] blob, final OutputStream contentStream) throws Exception {<o:p></o:p>

<o:p> </o:p>

       ByteArrayInputStream is = new java.io.ByteArrayInputStream(blob);<o:p></o:p>

       if (is != null) {<o:p></o:p>

           FileCopyUtils.copy(is, contentStream);<o:p></o:p>

                  }<o:p></o:p>

           }<o:p></o:p>



在JSP叶面要显示照片的地方,我们像如下定义

xml 代码
<image src="/file.do?method=show&id=5"/>  



这样照片显示就完成了,至此,我想Spring+hibernate已经展示了它在以前我们烦人的问题上展现了它独特的魅力
分享到:
评论

相关推荐

    SSH+Oracle上传图片

    【SSH+Oracle上传图片】项目详解 在Java Web开发中,SSH(Struts2、Spring、Hibernate)框架常用于构建企业级应用。本项目重点在于如何通过SSH框架将图片数据存储到Oracle数据库的Blob列中。以下是实现这一功能的...

    ssh文件上传和下载

    ssh下实现用户登陆 管理文件 文件的上传与下载

    用ssh实现图片上传

    ### 使用SSH实现图片上传知识点详解 #### 一、概述 本文档主要介绍如何利用SSH(Struts2 + Spring + Hibernate)框架实现图片上传功能。在Web应用开发中,图片上传是一项常见需求,尤其是在社交网络、博客系统等...

    ssh框架用struts2 hibernate实现图片的上传源码

    以上就是SSH框架中使用Struts2和Hibernate实现图片上传的主要知识点,涵盖了Web请求处理、ORM框架、文件上传、数据库操作以及前端交互等多个方面。实际项目开发时,还需要结合具体的业务需求和安全规范进行详细设计...

    SSH2上传实现

    ### SSH2上传实现详解 #### 一、概述 在现代Web开发中,文件上传是常见的需求之一。本文将详细介绍如何利用SSH2(Struts2 + Spring + Hibernate)框架结合ExtJS前端库实现文件上传功能。具体包括前端界面设计、...

    SSH图片上传

    在本场景中,"SSH图片上传"是指利用SSH框架实现图片的上传功能,并按照时间(年-月、日)进行分类存储。这个功能对于许多网站,特别是那些需要用户提交图片内容的社交平台或者电子商务系统来说,是非常常见的需求。 ...

    SSH框架实现文件上传(上传记录到数据库)

    在IT行业中,文件上传是一项常见的功能,特别是在Web应用中,用户可能需要上传各种类型的文件,如图片、文档或音频。SSH框架,即Spring、Struts2和Hibernate的组合,是Java Web开发中广泛使用的MVC架构。在这个场景...

    ssh文件上传下载ssh文件上传下载

    本文将详细介绍如何使用SSH进行文件上传和下载,以及相关的知识点。 首先,SSH文件传输通常依赖于两个主要命令:`scp`(Secure Copy)和`sftp`(Secure File Transfer Protocol)。这两个工具都基于SSH协议,提供在...

    SSH图片上传例子

    在这个"SSH图片上传例子"中,我们将探讨如何在SSH框架下实现图片的单个上传功能,并将其与数据库集成。 首先,我们需要了解SSH框架的基本概念。Struts2是基于MVC模式的Web应用框架,用于处理用户请求并将其转发到...

    SSH整合购物车有上传浏览

    在电商平台上,用户可能需要上传文件,如产品图片、发票证明或个人照片。SSH整合可以提供一个安全的文件上传通道,防止文件在传输过程中被篡改或窃取。同时,它还可以确保只有经过验证的用户才能上传文件,以防止...

    SSH中实现上传下载

    在这个场景中,"SSH中实现上传下载"指的是利用这些框架来处理文件和图片的上传与下载功能。下面我们将详细探讨如何在这样的环境中实现这个功能。 首先,Struts作为MVC(Model-View-Controller)设计模式的实现,...

    注解实现SSH2图片服务器分离上传下载

    压缩包内的“SSH2Html”文件可能包含了与SSH2相关的HTML页面,这些页面可能是用户界面,用于展示图片、上传图片或下载图片。这些页面可能通过JavaScript与后端服务进行交互,实现图片的上传和下载功能。 总结来说,...

    ssh框架集成,formFile批量上传完整版

    本文将详细讲解如何在SSH框架下实现文件的批量上传功能,主要涉及Struts2中的`FormFile`组件。 首先,让我们了解SSH框架的核心组件: 1. **Spring**:这是一个全面的轻量级应用框架,提供了依赖注入(DI)和面向切...

    ssh框架单文件与多文件上传

    文件上传是Web应用中常见的功能,用于让用户提交图片、文档等数据到服务器。 **Spring框架**: Spring是整个SSH架构的核心,它负责管理应用程序的组件,包括数据库连接、业务逻辑和服务层。在文件上传场景中,...

    Jcrop ssh 头像上传前后台

    本项目基于"Jcrop ssh 头像上传前后台"的标题和描述,我们可以探讨以下几个关键知识点: 1. **Jcrop**:Jcrop是一款JavaScript图像裁剪工具,它允许用户在网页上选取图像的一部分作为裁剪区域。Jcrop提供了丰富的...

    SSH增删改查+分页+图片上传

    在这个"SSH增删改查+分页+图片上传"的项目中,我们将深入探讨这三个框架在实际应用中的结合以及它们如何协同工作来实现数据管理、页面展示和文件上传等功能。 首先,Struts1是一个基于MVC(Model-View-Controller)...

    ssh框架上传文件测试

    在SSH框架中,文件上传功能是常见的需求,特别是在处理用户提交的表单数据时,例如图片、文档或者其他多媒体文件的上传。这个“ssh框架上传文件测试”可能是针对这一功能的一个实践项目或测试案例。 首先,让我们...

    基于SSH的文件上传与下载

    7. **安全性**:为了防止恶意文件上传和跨站脚本攻击(XSS),需要对上传的文件类型进行检查,限制只能上传特定类型的文件(如图片、文档等)。同时,对用户输入进行过滤和转义,防止注入攻击。 8. **异常处理**:...

    手写单张图片上传ssh

    在这个场景中,使用jsp(JavaServer Pages)作为前端页面,action(可能是Struts2框架中的Action类)作为后端控制器来实现图片上传至SSH(Secure Shell)服务器。SSH是一种网络协议,常用于安全地远程登录到服务器,...

    JavaWeb项目SSH框架的文件上传下载

    本教程将详细讲解如何在SSH框架下实现文件的上传与下载功能,以及如何在页面上展示上传后的图片文件。 1. **Struts2**:作为MVC框架,Struts2负责处理HTTP请求,定义Action类来处理业务逻辑,并返回相应的结果。在...

Global site tag (gtag.js) - Google Analytics