我正在使用ASP.NET开发一个图片库。我将用户的图像存储在SQL数据库中。我不确定如何显示图像看起来像。
假设每个用户有一张图片,我是这样做的:
- 从数据库中获取图像
- 将其保存为"file.jpg"
- ASP:形象。uri = "file.jpg"
这工作得很好,直到我发现如果少数用户同时加载该页面,它可能无法正常工作。
然后我认为将"file.jpg"更改为一些随机字符串会对我有所帮助:
- 从数据库中获取图像
- 保存为"ABCDUDHDJSAKFHADGJKHAKADFAD.jpg"
- ASP:形象。uri = "ABCDUDHDJSAKFHADGJKHAKADFAD.jpg"
- File.Delete (~/ABCDUDHDJSAKFHADGJKHAKADFAD.jpg);
但是无法删除这个文件,因为它仍然被服务器使用。
解决我的问题的正确方法是什么?在我的图片库中的用户最终将同时看到12张照片。
我通常做的是使用通用处理程序(ashx
文件)从DB提供图像。
您需要做的是创建一个ashx
文件,并使用以下内容:
context.Response.BinaryWrite(myImage);
你创建的图像标签如下:
<img alt="whatever" src="/images.ashx?iid=1243 />
其中iid
为镜像在DB中的唯一ID
实际上不应该存储该文件。你应该用流媒体播放。例如,创建一个处理程序,它从具有特定ID的用户返回图像,并使用该ID(如image.ashx?id=1
)调用它。处理程序可能看起来像
Image image; // image from your database
using(MemoryStream ms = new MemoryStream())
{
image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
ms.WriteTo(context.Response.OutputStream);
}
Response.ContentType = "image/png";
这个处理程序可以像静态图像文件一样使用。因此,您甚至可以将其用于background-image
:
<div style="background-image: url(image.ashx?id=1)">Username</div>