gpt4 book ai didi

c# - 在数据库中存储图像 - 网络桌面应用程序

转载 作者:太空狗 更新时间:2023-10-29 22:15:16 25 4
gpt4 key购买 nike

Related: Storing Images in DB - Yea or Nay?

阅读上述问题后,似乎使用数据库存储图像的首选方法是在数据库中仅存储文件路径。然而,这些答案中的大多数似乎都集中在网络服务器上。

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

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

优点:

  • 备份仅限于数据库。
  • 无需向网络开放服务器的文件系统。
  • 服务器信息访问的单一协议(protocol)。
  • protected 文件访问。 (用户不能进去删除所有图片)

缺点

  • 如果图片过多,将来会出现性能问题。

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

编辑 2: 正如下面的评论中所详述的,目前我假设使用 MySQL 数据库,尽管 SQL Server 2008 的 FileStream 功能可能会改变这一点。

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

最佳答案

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

通过网络服务交付

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

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

安全

如果 Intranet 安全是一个问题,这将是您可以确保用户经过身份验证并获得图像读取访问权限的关键点。审计跟踪也可以在这里实现。

文件系统安全

关于这些图像的安全性,考虑到 NTFS 为您提供了很多措施来确保只有被授权的人才能根据需要读取/删除/放置文件。接下来的任务是定义这些角色并实现 Windows 安全组。

future 需求

此方法允许您从 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);
}

关于c# - 在数据库中存储图像 - 网络桌面应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1862097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com