在DB中存储图像 - 联网桌面应用程序

Wil*_*ins 5 .net c# database image

相关: 在DB中存储图像 - 是还是不?

在阅读上述问题后,似乎使用数据库进行图像存储的首选方法是仅在数据库中存储文件路径.但是,大多数答案似乎都集中在Web服务器上.

就我而言,我正在开发一个桌面应用程序,它将在Intranet中的多台计算机上使用.专用服务器将托管数据库,其中包含与在各种设备上执行测试相关的信息.

图像需要以某种方式存储在服务器上.在这种情况下,将图像存储在数据库中是否是正确的方法,甚至是唯一的方法?

优点:

  • 备份仅限于数据库.
  • 无需打开服务器的文件系统到网络.
  • 服务器信息访问的单一协议.
  • 受保护的文件访问.(用户无法进入并删除所有图像)

缺点

  • 如果图像太多,将来会出现性能问题.

编辑:如标签中所述,应用程序是用C#/ .NET编写的.如果在这种情况下将图像写入文件系统是一个选项,我可以使用一些帮助来理解这是如何完成的.

编辑2:正如下面的评论中详细阐述的那样,现在我假设一个MySQL数据库,尽管SQL Server 2008的FileStream功能可能会改变它.

同样在我的情况下,图像将经常添加,并且在此之后可以被认为是只读的,因为它们永远不应该被更改,并且将在需要时被读出.图像可能很小(每个约70k),我也在考虑服务器上的其他二进制格式存储,每个文件大约20k,我可能会使用相同的存储和检索方法.

p.c*_*ell 7

我建议将这些文件保存在文件系统的磁盘上,而不是数据库中.文件的文件系统,关系数据的数据库等.

通过Web服务交付

考虑通过在该数据库计算机上托管Web服务/应用程序,将这些图像传送到桌面应用程序.该应用程序的工作是仅提供图像.使用ASP.NET应用程序在该计算机上设置Web服务器.有.ashx句柄请求并流式传输二进制图像.像这样的东西:

http://myserver/myapp/GetImage.ashx?CustomerID=123&ImageID=456

安全

如果内部网安全性存在问题,则可以确保用户经过身份验证并获得对映像的读访问权限.审计跟踪也可以在这里实施.

文件系统安全

关于这些映像的安全性,请考虑NTFS为您提供了许多措施,以确保只有经过授权的人才能根据需要读取/删除/放置文件.然后,任务是定义这些角色并实现Windows安全组.

未来需求

此方法允许您从Intranet上的任何位置安全地使用这些映像.也许这个应用程序会在某个时候迁移到Web应用程序?也许功能请求来自客户,其中Web解决方案是合适的?

这可能听起来有点过分而不是从数据库中读取blob,但从安全角度来看它很棒.考虑您的客户和患者对隐私和安全的期望.

<%@ WebHandler Language="C#" Class="Handler" %>

public class Handler : IHttpHandler {

public void ProcessRequest (HttpContext context) 
{
    //go to the DB and get the path for this ID.
    string filePath = GetImagePath(context.Request.QueryString["ImageID"]);

    //now you have the path on disk; read the file
    byte[] imgBytes=GetBytesFromDisk(filePath);

    // send back as byte[]
    context.Response.BinaryWrite(imgBytes);
}
Run Code Online (Sandbox Code Playgroud)


Gre*_*rts 3

我认为答案是没有正确答案。与编程(和生活)中的大多数事情一样,这取决于

以下是存储在数据库中的一些优点和缺点:

优点

  • 应用程序中数据的轻松备份、管理和一站式服务
  • 应用程序中的依赖性更少,移动部件也更少。接吻原理
  • 适用于 1GB 以下的小文件。
  • 嘿,它是一个数据库,因此可以在事务内完成保存,并在出现网络问题时回滚
  • Sharepoint 和 TFS 将所有内容存储在数据库中并且工作得很好。 即使是大男孩也会这样做
  • 安全性可由应用程序轻松控制,不涉及文件/文件夹权限

缺点

  • 占用数据库空间
  • 如果做得不好,可能会影响性能
  • 如果总是存储大文件 (>1GB),这不是一个好主意,除非在 SQL Server 2k8 中使用 Filestream
  • 要求您实施一个不错的缓存策略(尽管您可能无论如何都需要这个)
  • 文件系统感觉比数据库更自然,并且更容易手动替换/查看文件。

我想当谈到你的情况时,我会倾向于在 DB 中存储的简单性