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;
}
}
| 技術點 | 說明 |
|---|---|
MySqlDbType.Blob | 對應MySQL BLOB/LONGBLOB,支援大二進位物件 |
| 參數化查詢 | ?tid/?pic佔位符,徹底杜絕SQL注入 |
using區塊 | 確保連線與命令物件正確釋放,防止連線洩漏 |
| 隨機主鍵 | Utils.GetRandom(32)避免主鍵衝突,適合分散式環境 |