Good practice for working with files in ASP.NET web api?

本文关键字:NET ASP web api in files practice for working with Good | 更新日期: 2023-09-27 18:00:29

我刚开始处理文件,所以我读了一些书,尽管我觉得我仍然不确定如何使用asp.net web api处理它们。我想要的是能够通过我的网络api访问图像。到目前为止,我读到的是,许多人更喜欢保存文件,然后调用其URI,而不是将图像保存到数据库中,u只在那里保存URI。因此,我在web api上创建了一个imageController,它正是这样做的(Atlant使用localhost工作)。我现在有一些人认为我应该使用blob存储(因为我使用Azure)。

我的问题是:在我的项目中有一个保存图像文件的文件夹是错误的还是不好的做法?否则,保存图像的更好方法是什么?

Good practice for working with files in ASP.NET web api?

您的问题实际上是两个问题:

1.数据库与文件系统

它取决于两个主要因素:安全性和性能。

如果您的图像是敏感的,并且在应用程序"外部"访问它们(例如通过热链接)的风险是不可接受的,您必须使用数据库,并通过ASP提供图像。NET请求-您可以通过任何方式进行身份验证。然而,这比第二种选择要耗费更多的资源(见下文)。

如果不考虑安全性,那么您肯定希望使用文件系统存储。在传统的主机上,您可以将它们保存在磁盘上的"任何位置",IIS(Web服务器)将为用户提供它们(通过直接URL,绕过ASP.NET应用程序)。仅此一项就比DB+ASP有了巨大的性能改进。NET解决方案,原因有很多(请求线程池、内存压力、平均请求持续时间、IIS缓存…)。

2.webrole上的本地目录与blob存储

然而,在Azure中,您可以而且必须更进一步-使用独立于您的web角色的专用blob存储,因此即使您的IIS on web角色也不会为它们提供服务,而是blob存储上的专用服务器(这根本不需要担心,它只起作用)。您的web角色不应永久存储任何内容-它可能会失败,被Azure结构随时销毁并替换为新角色。所有永久性内容都必须转到Azure blob存储。

添加到@rouen的优秀答案中(我将只关注本地目录v/s blob存储)。

假设您将WebApi部署为Azure Web应用程序(而不是Web角色),请考虑以下场景:

  • 如果不小心删除了Web应用程序,图像会发生什么情况。在这种情况下,您的所有图像都将丢失
  • 如果您需要将应用程序从一个实例扩展到多个实例,会发生什么情况。由于这些文件位于实例本地目录中,因此不会在其他实例中进行复制。如果获取映像的请求落在VM上没有映像的实例上,那么您将无法提供该映像
  • 如果您需要在web应用程序中存储比可用磁盘大小更多的图像,会发生什么
  • 如果您需要通过另一个应用程序(除了WebApi)提供相同的图像,会发生什么

考虑到所有这些,我的建议是使用blob存储。您所做的是将图像存储在blob存储中,并将图像URL保存在数据库中。blob存储提供的一些优势包括:

  • 此时,您可以在单个blob存储帐户中存储价值500 GB的数据。如果您需要更多空间,只需创建另一个存储帐户即可。目前,每个订阅可以创建100个存储帐户,因此基本上可以在单个订阅中存储价值50TB的数据
  • Blob存储很便宜,你只需支付你使用的存储+存储交易成本,这也很便宜
  • blob存储中的内容会复制三次,如果您选择了地理冗余选项(这会产生额外成本),则您的内容会被复制六次(在主区域中复制三次+在辅助区域复制三次)。但是,您不应将复制与备份混为一谈
  • 由于内容是从blob存储中提供的,所以您实际上是在释放IIS服务器来提供该内容
  • 您可以利用Azure CDN,并从离您的最终用户最近的CDN节点提供内容

考虑到所有这些优点,我强烈建议您研究blob存储。