首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Struts 實戰:使用 FormFile 將圖片上傳至 MySQL 資料庫完整教學

     編輯:Java 程式設計入門

前言

本教學示範如何透過 Struts 的 FormFile 將使用者上傳的圖片儲存至 MySQL 資料庫。流程涵蓋建表、JSP 頁面、ActionForm、Action 類別完整代碼。

一、建立資料表

CREATE TABLE test (
    name VARCHAR(20),
    pic BLOB
);

在 MySQL 的 test 資料庫中執行。

二、JSP 上傳頁面 (multi.jsp)

關鍵點:enctype="multipart/form-data",否則提交會拋出異常。

<%@ page language="java" %>
<%@ taglib uri="https://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="https://jakarta.apache.org/struts/tags-html" prefix="html" %>
<html>
<head><title>多檔案上傳表單</title></head>
<body>
<html:form action="/multi" 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>

三、ActionForm (MultiForm.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; }
}

四、Action 類別 (MultiAction.java)

核心邏輯:取得 FormFile,建立資料庫連線,使用 PreparedStatement 的 setBinaryStream 寫入 BLOB 欄位。

package saoo.struts.action;
import java.io.*;
import java.sql.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;
import saoo.struts.form.MultiForm;

public class MultiAction extends Action {
    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 test VALUES (?, ?)";
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, name);
            // 寫入圖片二進位流
            ps.setBinaryStream(2, file.getInputStream(), file.getFileSize());
            ps.executeUpdate();
            ps.close();
            con.close();
            return mapping.findForward("success");
        } catch (Exception e) {
            e.printStackTrace();
            return mapping.findForward("error");
        }
    }
}

五、關鍵點總結

  • 表單必須設定 enctype="multipart/form-data"
  • ActionForm 使用 org.apache.struts.upload.FormFile 接收檔案
  • 資料庫欄位類型為 BLOB
  • 使用 PreparedStatement.setBinaryStream(int parameterIndex, InputStream x, int length) 寫入二進位資料
  • 完整的異常處理(SQLException、ClassNotFoundException、FileNotFoundException、IOException)

Struts 配置片段 (struts-config.xml)

<action path="/multi" 
        type="saoo.struts.action.MultiAction" 
        name="multiForm" 
        input="/form/multi.jsp" 
        scope="request">
    <forward name="success" path="/success.jsp"/>
    <forward name="error" path="/error.jsp"/>
</action>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved