我是新工作的文件,所以我做了一些阅读,尽管我觉得我仍然不确定如何使用asp.net web api处理它们。 我想要的是能够通过我的网络API获取图像。到目前为止我所读到的是,许多人更喜欢保存文件,然后调用它的URI,而不是将图像保存到数据库,只保存URI。然后我在web api上创建了一个imageController,它正是这样做的(Atleast使用localhost工作)。我现在让一些人争辩说我应该使用blob存储(因为我使用Azure)。
我的问题是:在我保存图像文件的项目中有一个文件夹是错误还是不好?那么保存图像的更好方法是什么?
答案 0 :(得分:2)
你的问题实际上是两个问题:
这取决于两个主要因素:安全性和性能。
如果您的图片是敏感的,并且在应用程序“外部”访问它们的风险(例如通过热链接)是不可接受的,您必须使用数据库,并通过ASP.NET请求提供图像 - 您可以通过任何方式验证想。然而,这比第二种选择(见下文)更加耗费资源。
如果安全性无关紧要,那么您肯定想要进行文件系统存储。在传统托管上,您可以将它们“保存在磁盘上”,IIS(Web服务器)将为用户提供服务(通过直接URL,绕过您的ASP.NET应用程序)。仅此一点就是DB + ASP.NET解决方案的巨大性能改进,原因有很多(请求线程池,内存压力,平均请求持续时间,IIS上的缓存......)。
但是,在Azure中,你可以,而且还需要更进一步 - 使用专用的blob存储,独立于你的web角色,所以即使你的webrole上的IIS也不会为它们提供服务,而是blob存储上的专用服务器(这样做)根本不需要关心你 - 它只是有效。您的Web角色不应永久存储任何内容 - 它可能会在Azure结构中随时失败,被销毁并替换为新的。所有永久性内容必须转到Azure blob存储。
答案 1 :(得分:2)
添加@ rouen的优秀答案(我将只关注本地目录v / s blob存储)。
假设您将WebApi部署为Azure Web应用程序(而不是Web角色),请考虑以下方案:
考虑到所有这些,我的建议是使用blob存储。您要做的是将图像存储在blob存储中并将图像URL保存在数据库中。 blob存储提供的一些优点是:
考虑到所有这些优点,我强烈建议您查看blob存储。