用Struts向MySQL中储存图片
### 使用Struts向MySQL中存储图片 在本篇教程中,我们将探讨如何使用Apache Struts框架将用户上传的图片保存到MySQL数据库中。这不仅包括前端表单的设计、后端逻辑处理,还包括与数据库交互的具体实现。以下是详细的步骤: #### 1. 数据库准备 我们需要在MySQL中创建一个表用于存储图片数据。该表应包含至少两个字段:`name`(用于存储图片名称)和`pic`(用于存储图片二进制数据)。这里使用`BLOB`类型来存储图片。 ```sql CREATE TABLE test ( name VARCHAR(20), pic BLOB ); ``` #### 2. 前端表单设计 为了实现文件上传功能,我们需要使用Struts的HTML标签库中的`html:file`标签来创建一个文件输入框。此外,由于涉及到文件上传,我们需要设置表单的`enctype`属性为`multipart/form-data`。 ```jsp <%@ page language="java" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <html> <head> <title>JSP for Multi Form</title> </head> <body> <html:form action="/multi" enctype="multipart/form-data"> <!-- Important to set 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> ``` #### 3. 定义ActionForm 在Struts框架中,ActionForm类用于封装用户提交的数据。在这个例子中,我们需要定义一个名为`MultiForm`的ActionForm类,它包含了两个字段:`file`和`name`。其中`file`是一个`FormFile`类型的对象,用于接收上传的文件;`name`是一个字符串,用于存储图片名称。 ```java package saoo.struts.form; import org.apache.struts.action.ActionForm; import org.apache.struts.upload.FormFile; public class MultiForm extends ActionForm { private FormFile file; private String name; public FormFile getFile() { return file; } public void setFile(FormFile file) { this.file = file; } public String getName() { return name; } public void setName(String name) { this.name = name; } } ``` #### 4. 处理Action 最后一步是在Action类中处理上传的文件并将其保存到数据库中。这里我们需要使用JDBC连接MySQL,并编写SQL语句来插入数据。以下是具体的代码实现: ```java package saoo.struts.action; import java.io.File; import java.io.FileInputStream; 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.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class UploadAction implements org.apache.struts.action.Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { MultiForm multiForm = (MultiForm) form; // 获取文件 FormFile file = multiForm.getFile(); String fileName = multiForm.getName(); // 连接数据库 Connection conn = null; PreparedStatement pstmt = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "username", "password"); // 准备SQL语句 String sql = "INSERT INTO test (name, pic) VALUES (?, ?)"; pstmt = conn.prepareStatement(sql); // 设置参数 pstmt.setString(1, fileName); if (file != null) { FileInputStream fis = new FileInputStream(file.getFile()); pstmt.setBinaryStream(2, fis, file.getFile().length()); } else { pstmt.setBytes(2, null); } // 执行SQL pstmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } } return mapping.findForward("success"); } } ``` ### 总结 通过以上步骤,我们已经成功实现了使用Struts框架向MySQL数据库中存储图片的功能。需要注意的是,在实际项目中还需要考虑更多的细节问题,比如文件大小限制、文件类型验证等。此外,确保数据库连接安全、合理管理资源也是非常重要的一部分。希望本教程能够帮助你更好地理解Struts与MySQL结合进行文件上传的应用场景和技术实现。
这个例子是通过用Struts的FormFile来写入到MySQL中。用户通过选一个图片,然后按submit就可以存入数据库中。
1.首先需要建立一个表:
create table test
( name varchar(20),
pic blob );
在MySQL的test库中
<%@ page language="java"%>
<%@ taglib uri=
"http://jakarta.apache.org/struts/tags-bean"
prefix="bean"%>
<%@ taglib uri=
"http://jakarta.apache.org/struts/tags-html"
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>
<html:errors property="name"/></br>
<html:submit/><html:cancel/>
</html:form>
</body>
</html>
2. 相对应的ActionForm:
//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
剩余7页未读,继续阅读
- 粉丝: 3
- 资源: 57
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助