2011-12-26 102 views
5

我使用的是asp.net mvc,并有一个用户可以上传图片的部分。我想知道我应该在哪里存储它们。我应该将上传的(img文件)保存到App_Data吗?

我跟着this tutorial,他似乎把它存储在app_data中。然而,我读过另一个人说,它应该只保存你的数据库。

所以不知道使用app_data有什么好处。我在共享主机上,所以我不知道这是否有所作为。

编辑

我计划的路径存储在数据库中的图像。然后,我将在图像标记中使用它们,并在它们到达我的网站时将它们呈现给用户。我有一个文件上传器,只会预期图像(检查将客户端和服务器)

+0

将图像内容存储在数据库中的文件系统和图像路径中。为什么?阅读[本文](http:// stackoverflow。com/questions/561447/store-pictures-as-files-or-in-the-database-for-a-web-app) –

+0

小评论:如果你将来需要横向扩展,将上传的内容存储在Web服务器上的文件夹将成为问题。如果您担心这一点,请考虑使用Azure Blob存储,亚马逊简单存储或甚至数据库等服务,如以下某些答案所示。 – santiagoIT

回答

4

该教程是一个简单的例子 - 如果你阅读评论,原始代码只是保存到uploads目录,没有app_data在眼前。

它被更改为app_data,因为这是一个特殊的文件夹 - 不允许执行代码。

而你已经理解正确 - app_data真的存在基于文件的数据库。这是该文件夹的含义。因为这样将图像保存到其中并不觉得是正确的。

如果您确定只有图片上传(并且您控制了该图片),我会建议您使用/uploads目录 - 图片的保留位置也不允许执行代码(您应该可以通过IIS控制某些内容)。

+0

上传是一个特殊的文件夹还是您刚创建的? – chobo2

+0

@ chobo2 - 就像我之前提到的那样,因为它最初是在您链接的文章中完成的。 – Oded

+0

我不知道我在IIS上有多少控制,因为我说我正在使用共享主机。我将在数据库中存储相对路径,然后获取将在img标记中使用的完整路径。所以我不确定这是否代码执行。 – chobo2

1

我想说,这取决于你将在随后的图像做什么。如果您在img标签中使用这些图片,则可以将它们保存在内容/文件夹结构中的某个位置。

如果您不需要从外部访问它们,或者需要将它们改回来,则可以将它们存储在Web根目录下,如果主机允许的话。

我不会将它们存储在app_data中,因为我个人认为它更像是一个存储数据库的约定。大多数不熟悉该产品的开发人员不会在图像中寻找。

但是:您可以将二进制文件存储在数据库中(即使这可能不是最好的做法),所以指向同一目录中的文件的数据库中的引用再次有意义。

虽然我觉得这不仅仅是一个技术问题,而是一个意见。

0

我宁愿将它们存储在数据库中。在文件系统上存储图像时,我发现管理它们会有点困难。使用数据库,您可以快速重命名文件,删除文件,复制文件等。您可以在文件系统上执行相同的操作,但需要一些脚本知识。

另外我更喜欢不管理路径和文件位置,这是对数据库的另一次投票。这些路径值总是进入web.config,并且可能变得更难以部署和管理。

+1

理想情况下存储在数据库中的唯一时间是使用映射到文件系统的SQL文件类型。性能影响在你不知道的时候是众所周知的。 –

相关问题