首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

ASP.NET上傳圖片至MySQL資料庫完整實作:檔案流讀取與參數化查詢防注入

     編輯:MySQL 資料庫相關知識

ASP.NET WebForms環境下,將上傳圖片以二進位流寫入MySQL BLOB欄位,採用MySqlParameter參數化查詢防止SQL注入,含完整按鈕事件與資料存取封裝程式碼。

前端上傳控制項

<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" Text="上傳" OnClick="Button1_Click" runat="server" />

按鈕點擊事件:讀取檔案流

protected void Button1_Click(object sender, EventArgs e)
{
    string tid = Utils.GetRandom(32);           // 32位隨機主鍵
    Stream stream = FileUpload1.PostedFile.InputStream;
    int length = FileUpload1.PostedFile.ContentLength;
    byte[] pic = new byte[length];
    stream.Read(pic, 0, length);                // 讀入位元組陣列

    bool success = InsertPhoto(tid, pic);
    // 後續處理:成功提示、錯誤記錄等
}

資料存取層:參數化插入

public bool InsertPhoto(string tid, byte[] pic)
{
    using (var conn = new DBConn().GetConnection())
    using (var cmd = new MySqlCommand(
        "INSERT INTO teacher (TID, TPHOTO, TDELETE) VALUES (?tid, ?pic, ?flg)", conn))
    {
        cmd.Parameters.Add(new MySqlParameter("?tid", MySqlDbType.String, 32) { Value = tid });
        cmd.Parameters.Add(new MySqlParameter("?pic", MySqlDbType.Blob) { Value = pic });
        cmd.Parameters.Add(new MySqlParameter("?flg", MySqlDbType.Int16) { Value = 0 });

        conn.Open();
        return cmd.ExecuteNonQuery() > 0;
    }
}

關鍵技術點

資料表結構建議

CREATE TABLE teacher (
    TID      CHAR(32)     NOT NULL PRIMARY KEY,
    TPHOTO   LONGBLOB     NOT NULL,
    TDELETE  SMALLINT     NOT NULL DEFAULT 0
);

效能與擴展建議

  • 大檔案(>10MB)建議改用FileStream分塊讀寫或存檔案系統+資料庫存路徑。
  • 頻繁讀取圖片時,考慮加入快取層(Redis/CDN)減輕資料庫壓力。
  • 生產環境需加入檔案型別驗證(MIME/副檔名)、大小限制、惡意腳本掃描。

此範例展示了ASP.NET與MySQL Connector/NET整合的標準模式,參數化查詢與資源正確釋放是企業級應用的基礎守則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
技術點說明
MySqlDbType.Blob對應MySQL BLOB/LONGBLOB,支援大二進位物件
參數化查詢?tid/?pic佔位符,徹底杜絕SQL注入
using區塊確保連線與命令物件正確釋放,防止連線洩漏
隨機主鍵Utils.GetRandom(32)避免主鍵衝突,適合分散式環境