Đầu tiên có một tập tin .aspx riêng biệt cho hình ảnh (thực sự tôi muốn ủng hộ một tình trạng quá tải IHttpHandler cho điều này, nhưng nguyên tắc là sam e và chúng ta chỉ giới thiệu một khái niệm mới tại một thời điểm).
Tệp .aspx sẽ kế thừa từ mã sau và không có nội dung. Vì vậy, nó sẽ có chỉ thị <%@ Page %>
và không có gì khác.
Trong mã sau, trong trình xử lý sự kiện tải trang, lấy hình ảnh và đặt loại nội dung của phản hồi thành giá trị thích hợp (hoặc nếu tất cả hình ảnh là hình ảnh/png, bạn có thể chỉ là mã cứng). Sau đó ghi hình ảnh vào đầu ra.
TestDBDataContext context1 = new TestDBDataContext();
int id;
if(int.TryParse(Request.QueryString["id"], out id))
{
var r = (from a in context1.ImageTables where a.Id == 8 select a).FirstOrDefault();
if(r != null)
{
Response.ContentType = r.ContentType;
Response.BinaryWrite(r.FileImage.ToArray());
return;
}
}
//code to handle 404 not found for no such image here (send error message or Server.Transfer to error page, etc.
Sau đó, bạn có thể sử dụng điều này với <img src="profileImg.aspx?id=8" alt="" />
, vv
Một cải tiến hiệu suất là để có được byte một đoạn 4k tại một thời điểm từ cơ sở dữ liệu và viết chúng vào Response.OutputStream
, chứ không phải là một mảng lớn trong bộ nhớ. Đối với các tập tin nhỏ sự khác biệt là không quan trọng, nhưng đối với các tập tin rất lớn nó có thể được đáng kể (như trong "hurray bây giờ máy chủ web của tôi không rơi nhiều lần nữa!" Đáng kể).
Nguồn
2011-12-16 16:15:32
mà wud tạo ra một bài viết trở lại mọi lúc, đúng! –
Không, không có dữ liệu nào được gửi lại thông qua POST. –
cảm ơn, đây là những gì tôi đang tìm kiếm! –