將圖片以二進位 (`byte[]`) 存入 SQL Server `image`/`varbinary(max)` 欄位,並提供多種前端呈現方式(``、`
CREATE TABLE StoreImage (
id INT IDENTITY(1,1) PRIMARY KEY,
markname VARCHAR(100) NOT NULL, -- 圖片備註名稱
markContent IMAGE NOT NULL, -- 二進位內容 (SQL 2005+ 建議 varbinary(max))
markType VARCHAR(100) NOT NULL, -- MIME 類型 (image/jpeg, image/png...)
markSize INT NOT NULL, -- 檔案大小 (bytes)
markLinkUrl VARCHAR(1000) NOT NULL, -- 選填:外部連結備用
markDate DATETIME NOT NULL DEFAULT GETDATE()
);
protected void btnUpload_Click(object sender, EventArgs e)
{
if (!FileUpload1.HasFile) return;
byte[] imgBytes = FileUpload1.FileBytes;
string mime = FileUpload1.PostedFile.ContentType;
int size = imgBytes.Length;
using (var conn = new SqlConnection(connStr))
using (var cmd = new SqlCommand(
"INSERT INTO StoreImage (markname, markContent, markType, markSize) VALUES (@name, @content, @type, @size)", conn))
{
cmd.Parameters.AddWithValue("@name", txtMarkName.Text);
cmd.Parameters.AddWithValue("@content", imgBytes);
cmd.Parameters.AddWithValue("@type", mime);
cmd.Parameters.AddWithValue("@size", size);
conn.Open();
cmd.ExecuteNonQuery();
}
}
// ShowImage.ashx
public void ProcessRequest(HttpContext context)
{
int id = int.Parse(context.Request["id"]);
using (var conn = new SqlConnection(connStr))
using (var cmd = new SqlCommand("SELECT markContent, markType FROM StoreImage WHERE id=@id", conn))
{
cmd.Parameters.AddWithValue("@id", id);
conn.Open();
using (var rd = cmd.ExecuteReader())
{
if (rd.Read())
{
context.Response.ContentType = rd["markType"].ToString();
context.Response.BinaryWrite((byte[])rd["markContent"]);
}
}
}
}
前端: `string base64 = Convert.ToBase64String(imgBytes);
imgTag.Src = $"data:{mime};base64,{base64}";
Response.Clear();
Response.ContentType = mime;
Response.AddHeader("Content-Disposition", $"attachment; filename={markname}.jpg");
Response.BinaryWrite(imgBytes);
Response.End();