邪恶八进制信息安全团队技术讨论组's Archiver

pub!1c 2005-11-18 12:07

[转载]教您如何用Struts向数据库中储存图片

文章作者:ytfh
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])


这个例子是通过用Struts的FormFile来写入到MySQL中。用用户通过选一个图片,然后按submit就可以存入数据库中,其中先要建立一个表:

[quote]
create table test
( name varchar(20),
pic blob );
在MySQL的test库中

<%@ page language="java"%>
<%@ taglib uri=
"[url]http://jakarta.apache.org/struts/tags-bean[/url]"
prefix="bean"%>
<%@ taglib uri=
"[url]http://jakarta.apache.org/struts/tags-html[/url]"
prefix="html"%>

<html>
<head>
  <title>JSP for multiForm form</title>
</head>
<body>
  <html:form action="/multi"
  enctype="multipart/form-data">
  一定要用enctype=“multipart/form-data“
  不然就提交之后就会有抛出异常
  file : <html:file property="file"/>
  <html:errors property="file"/></br>
  name : <html:text property="name"/>
  <html:errors property="name"/></br>
  <html:submit/><html:cancel/>
  </html:form>
</body>
</html>
[/quote]




2. 相对应的ActionForm:

[quote]
//Created by MyEclipse Struts
// XSL source (default):
platform:/plugin/com.genuitec.eclipse.
cross.easystruts.eclipse_3.8.1
/xslt/JavaClass.xsl

package saoo.struts.form;

import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;

/**
* MyEclipse Struts
* Creation date: 08-24-2004
*
* XDoclet definition:
* @struts:form name="multiForm"
*/
public class MultiForm extends ActionForm
{

   // ----------------
Instance Variables

   /** file property */
   private FormFile file;

   /** name property */
   private String name;

   // -----------------
Methods

   /**
    * Returns the file.
    * @return FormFile
    */
   public FormFile getFile()
    {
      return file;
   }

   /**
    * Set the file.
    * @param file The file to set
    */
   public void setFile(FormFile file)
    {
      this.file = file;
   }

   /**
    * Returns the name.
    * @return String
    */
   public String getName()
    {
      return name;
   }

   /**
    * Set the name.
    * @param name The name to set
    */
   public void setName(String name)
    {
      this.name = name;
   }
}
[/quote]



3. 对就的Action:

[quote]
//Created by MyEclipse Struts
// XSL source (default):
platform:/plugin/com.genuitec.eclipse.
cross.easystruts.eclipse_3.8.1
/xslt/JavaClass.xsl

package saoo.struts.action;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

import saoo.struts.form.MultiForm;

/**
* MyEclipse Struts
* Creation date: 08-24-2004
*
* XDoclet definition:
* @struts:action path="/multi"
name="multiForm" input="/form/multi.jsp"
scope="request"
*/
public class MultiAction extends Action
{

   // ---------------
Instance Variables

   // ---------------
Methods

   /**
    * Method execute
    * @param mapping
    * @param form
    * @param request
    * @param response
    * @return ActionForward
    */
   public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
        {
      MultiForm multiForm = (MultiForm)
        form;
      FormFile file = multiForm.getFile();

      String name = multiForm.getName();
      try {
        Class.forName
            ("org.gjt.mm.mysql.Driver");
        String url="jdbc:mysql:
            ///test";
        Connection con=DriverManager.getConnection
            (url,"root","password");
        String sql="insert into pic values (?,?)";
        PreparedStatement ps
            =con.prepareStatement(sql);
        ps.setString(1, name);
//加入图片到数据库
   
ps.setBinaryStream
(2,file.getInputStream(),
file.getFileSize());
        ps.executeUpdate();
        ps.close();
        con.close();
      } catch (SQLException se)
        {
        se.printStackTrace();
        return mapping.findForward("error");
      } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return mapping.findForward("error");
      } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return mapping.findForward("error");
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return mapping.findForward("error");
      }
      return mapping.findForward("success");
   }
}
[/quote]

页: [1]
© 1999-2008 EvilOctal Security Team