在哪里存储以及如何删除照片库中的图像



我正在使用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>

最新更新