把上传的文件写入到数据库

    技术2022-06-28  47

    以写入图片为例.

    一.创建数据库

    create table myblob( id number primary key, name varchar2(50), photo blob);

    二.环境搭建

    Struts2.1+Spring2.5+Hibernate3.2+Oralce9i

    1.实体类:

     public class Myblob implements java.io.Serializable { private Long id; private String name; private byte[] photo; //注意 //getter and setter 方法...

    映射文件:

    <hibernate-mapping> <class name="org.blob.model.Myblob" table="MYBLOB" schema="SCOTT"> <id name="id" type="java.lang.Long"> <column name="ID" precision="22" scale="0" /> <generator class="assigned"/> <!-- 主键手动设置 --> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="50" /> </property> <property name="photo" type="binary"> <!-- binary对应对应二进制的byte[]--> <column name="PHOTO" /> </property> </class> </hibernate-mapping>

    2.DAO

    这里就只给出接口吧,比较简单。

    public interface MyblobDAO { public void save(Myblob myblob); public List findAll(); public Myblob findById(Long id); }

    3.Service

    这里也只给出接口,基本与DAO中的类似。

    public interface MyblobService { public void saveMyblob(Myblob myblob); public List getAllMyBlob(); public Myblob getMyblob(Long id); }

    三 .前台开发 

     1.添加界面

    2.处理方法

      //添加 public String mysave() throws Exception { //上传文件 String path=ServletActionContext.getServletContext().getRealPath(File.separator + "upload")+ File.separator + this.photoFileName; OutputStream out = new FileOutputStream(path); InputStream in = new FileInputStream(this.photo); int len=0; while((len=in.read())!=-1){ out.write(len); } in.close(); out.close(); //把上传的文件写入数据库 InputStream is = new FileInputStream(path); byte[] b = new byte[is.available()]; is.read(b); is.close(); Myblob m = new Myblob(); m.setId(Long.valueOf(id)); m.setName(name); m.setPhoto(b); this.myblobService.saveMyblob(m); //删除上传的图片 File file = new File(path); file.delete(); return SUCCESS; }

    思路:先把图片上传到服务器上的一个文件夹中,然后,把文件中的图片写入到数据库中。

    为什么不直接把上传的文件,写入到数据库呢?o(︶︿︶)o 唉,暂时没想到....

    3.信息的列表显示:

    //列表显示 public String mylist()throws Exception{ List list=this.myblobService.getAllMyBlob(); ActionContext.getContext().put("list", list); return SUCCESS; }

    <table bgcolor="#f2f2f2" border="1" cellpadding="3" cellspacing="0" width="60%"> <tr> <td>序号</td> <td>名字</td> <td>图片</td> </tr> <s:iterator value="list"> <tr> <td><s:property value="id"/></td> <td><s:property value="name"/></td> <td><img alt="" src="getMyPhoto.action?id=<s:property value='id'/>"></td> </tr> </s:iterator> </table>

    4.<img alt="" src="getMyPhoto.action?id=<s:property value='id'/>">的处理

    //显示图片 public String getMyPhoto()throws Exception{ HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); Long id=Long.parseLong(request.getParameter("id")); Myblob myblob=this.myblobService.getMyblob(id); if(myblob!=null){ if(myblob.getPhoto().length>0){ response.setContentType("image/"); //设置响应类型为image response.getOutputStream().write(myblob.getPhoto()); response.getOutputStream().flush(); response.getOutputStream().close(); } } return null; }

    <!-- 显示照片 -->  <action name="getMyPhoto" method="getMyPhoto" class="MyBlobAction"/>

    思路:图片的显示,是以“流”的形式输出到界面上。所以,右键鼠标“图片另存为”是不行的。

     


    最新回复(0)