struts2保存图片到数据库,从数据库显示图片

1、数据结构:

CREATE TABLE [photo] (
 [id] [int] IDENTITY (1, 1) NOT NULL ,
 [ordernumber] [nvarchar] (20)  [photo] [image] NULL ,
  PRIMARY KEY  CLUSTERED
 (
  [id]
 )  ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

 

 

2、整体架构:struts2+spring2+hibernate3

3、vo结构:

public class Photo implements Serializable
      {
      private int id;
       private String ordernum;
      private byte[] photo;

      ......省get(),set()方法

     }

 4、数据存取DAO:

public interface PhotoDao
{
       public void savePhoto(Photo photo);
      public Photo getPhoto(String ordername);
}

5、实现

    public class PhotoDaoHibernate extends HibernateDaoSupport implements PhotoDao
{

@Override
public Photo getPhoto(String ordername)
{
List list=this.getHibernateTemplate().find("from Photo where ordernum=?",ordername);
System.out.println("listsize"+list.size()+";filename:"+ordername);
if(list.size()>0)
{

return (Photo)list.get(0);
}
else
{
return null;
}
}

@Override
public void savePhoto(Photo photo)
{
this.getHibernateTemplate().save(photo);

}

}

5、上传Action

public class UpLoadPhoto extends ActionSupport
{
 private PhotoDao pdi;//pdi为通过spring注入的Dao实例,用于把Photo对象存入数据库
  private String filename;
 private File upload;
 private InputStream inputStream;
 public void setInputStream(InputStream inputStream)
 {
  this.inputStream = inputStream;
 }
 public String upload()
 {
  if(filename!=null && !"".equals(filename))
  {
   Photo photo=new Photo();
   photo.setOrdernum(filename);
   photo.setPhoto(getBytesFromFile(upload));
   System.out.println(photo.getOrdernum()+photo.getPhoto());
   pdi.savePhoto(photo);
  }
  return SUCCESS;
 }
 public static byte[] getBytesFromFile( File file ) {
  
          long length = file.length();
          byte[] bytes = new byte[(int)length];
  
          try {
              InputStream is = new FileInputStream(file);
  
              // Read in the bytes
             int offset = 0;
              int numRead = 0;
             while (offset < bytes.length
                      && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
                  offset += numRead;
              }
   
             // Ensure all the bytes have been read in
               if (offset < bytes.length) {
                  throw new IOException("Could not completely read file "+file.getName());
               }
   
               // Close the input stream and return bytes
               is.close();
          } catch(Exception e ) {
              throw new RuntimeException(e);
          }
          return bytes;
      }     
     
       }   
  
*/
 public PhotoDao getPdi()
 {
  return pdi;
 }
 public void setPdi(PhotoDao pdi)
 {
  this.pdi = pdi;
 }
  public String getFilename()
 {
  return filename;
 }
 public void setFilename(String filename)
 {
  this.filename = filename;
 }
 public File getUpload()
 {
  return upload;
 }
 public void setUpload(File upload)
 {
  this.upload = upload;
 }
 


}

6、jsp上传

<s:form action="uploadfile" method="post" enctype="multipart/form-data">
   <s:file name="upload"/>
   文件名:<s:textfield name="filename"/>
   <s:submit value="图片上传"></s:submit>
     </s:form>

7、用于从数居库显示图片的Action

public class ShowPhoto extends ActionSupport
{
 private PhotoDao pdi;
 private String filename;
 public String getFilename()
 {
  return filename;
 }

 public void setFilename(String filename)
 {
  this.filename = filename;
 }

 public PhotoDao getPdi()
 {
  return pdi;
 }

 public void setPdi(PhotoDao pdi)
 {
  this.pdi = pdi;
 }

 @Override
 public String execute() throws Exception
 {
  // TODO Auto-generated method stub
  return SUCCESS;
 }
 public InputStream getInputStream()
 {
  
  Photo photo=new Photo();
  try
  {
     photo=pdi.getPhoto(filename);
   
  } catch (RuntimeException e)
  {
     e.printStackTrace();
  }
    if(photo==null||photo.getPhoto()==null)
  {
   return null;
  }
  else
  {
   System.out.println(photo.getOrdernum());
   System.out.println(photo.getPhoto());
   System.out.println("Image_Lenghth:"+photo.getPhoto().length);
   ByteArrayInputStream bais;
   try
   {
    bais = new ByteArrayInputStream(photo.getPhoto());
      return bais;
   } catch (RuntimeException e)
   {
       e.printStackTrace();
    return null;
   }
   
  }
 }

}

8、jsp中显示图片

<s:url id="image" action="getPhoto?filename=ck" /><!--ck为数据库中查找图片的关键字(上传时设的文件名)-->
  <img src="<s:property value="#image"/>"/>

9、struts.xml配置

<action name="uploadfile" class="uploadfile" method="upload"><!-- 指定逻辑方法method -->
   <result name="success">/success.jsp</result>
  </action>
  <action name="getPhoto" class="getPhoto" >
   <result name="success" type="stream">
    <param name="contentType">image/jpeg</param>
    <param name="inputName">inputStream</param>
      <param name="contentDisposition">attachment;filename="s.jpg"</param><!--指定默认文件名-->
     <param name="bufferSize">1024</param>><!--指定缓存大小-->
   </result>
  </action> 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值