byte[] fileData = FileUpload1.FileBytes; // .NET 2.0+
public static byte[] FileToBytes(string path)
{
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
using (BinaryReader br = new BinaryReader(fs))
{
return br.ReadBytes((int)fs.Length);
}
}
public static byte[] ImageToBytes(Image img, ImageFormat format = null)
{
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, format ?? ImageFormat.Jpeg);
return ms.ToArray();
}
}
CREATE TABLE Images (
Id INT PRIMARY KEY IDENTITY,
FileName NVARCHAR(255),
ContentType NVARCHAR(100),
ImageData VARBINARY(MAX), -- SQL Server
-- BLOB / BYTEA (PostgreSQL) / LONGBLOB (MySQL)
CreatedAt DATETIME DEFAULT GETDATE()
);
// ImageHandler.ashx
public class ImageHandler : IHttpHandler
{
public void ProcessRequest(HttpContext ctx)
{
string id = ctx.Request.QueryString["id"];
if (string.IsNullOrEmpty(id)) return;
byte[] data = GetImageFromDb(id); // 自行實作查詢
if (data == null || data.Length == 0) return;
ctx.Response.Clear();
ctx.Response.ContentType = "image/jpeg"; // 或依資料庫存的 ContentType
ctx.Response.BinaryWrite(data);
ctx.Response.End();
}
public bool IsReusable => false;
}
前端使用:<img src="ImageHandler.ashx?id=123" />
protected void Page_Load(object sender, EventArgs e)
{
byte[] imgData = GetImageFromDb(Request.QueryString["id"]);
if (imgData != null && imgData.Length > 0)
{
Response.Clear();
Response.ContentType = "image/gif";
Response.OutputStream.Write(imgData, 0, imgData.Length);
Response.End();
}
}
private Image GetImageFromOracle()
{
using (OracleConnection conn = new OracleConnection(connStr))
using (OracleCommand cmd = new OracleCommand("SELECT IMGDATA FROM T_IMG WHERE IMGID=100", conn))
{
conn.Open();
byte[] data = (byte[])cmd.ExecuteScalar();
using (MemoryStream ms = new MemoryStream(data))
return Image.FromStream(ms);
}
}
src="data:image/png;base64,...",減少 HTTP 請求。