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

时间:2013-04-07 12:50:26

标签: asp.net sql image photo

我正在使用ASP.NET开发一个照片库。 我将用户的图像存储在SQL数据库中。我不确定如何显示图像。

假设每个用户有1张图片,我正在做类似的事情:

  • 从数据库中获取图片
  • 将其作为“file.jpg”
  • 保存在服务器的光盘上
  • ASP:Image.uri =“file.jpg”

在我发现如果很少有用户同时加载该页面之前,这一点工作正常,可能无法正常工作。

然后我将“file.jpg”改成一些随机字符串会对我有所帮助:

  • 从数据库中获取图片
  • 将其保存在服务器的光盘上“ABCDUDHDJSAKFHADGJKHAKADFAD.jpg”
  • ASP:Image.uri =“ABCDUDHDJSAKFHADGJKHAKADFAD.jpg”
  • File.Delete( “〜/ ABCDUDHDJSAKFHADGJKHAKADFAD.jpg”);

但是删除此文件是不可能的,因为它仍然被服务器使用。

解决问题的正确方法是什么?我照片库中的用户最终会同时看到12张照片。

2 个答案:

答案 0 :(得分:0)

您不应该实际存储该文件。你应该流式传输它。例如,创建一个处理程序,该处理程序从具有特定ID的用户返回图像,并使用该image.ashx?id=1之类的ID调用它。处理程序看起来像

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>

答案 1 :(得分:0)

我通常使用通用处理程序(ashx文件)从DB提供图像。

您需要做的是创建一个ashx文件并使用以下内容:

context.Response.BinaryWrite(myImage);

您创建的图像标记如下:

<img alt="whatever" src="/images.ashx?iid=1243 />

其中iid是数据库中图像的唯一ID。