【问题标题】:Can I use App_Data folder as a normal folder in my C# ASP.NET MVC application?我可以在我的 C# ASP.NET MVC 应用程序中将 App_Data 文件夹用作普通文件夹吗?
【发布时间】:2020-08-25 13:06:05
【问题描述】:

我知道这个文件夹App_Data 通常用于数据库文件等,但我现在想要这个用于图像,想法是用户将图像上传到这个文件夹并且可以从网站访问它们,我基本上希望App_Data 是现在使用/认为是普通文件夹,有人知道该怎么做吗?只是权限设置还是这个文件夹不能像普通文件夹一样使用。在此先感谢:)

【问题讨论】:

    标签: c# asp.net-mvc permissions data-access app-data


    【解决方案1】:

    ApplicationData 是应用程序数据的文件夹。您在那里存储什么样的数据取决于您。请注意,Windows 上有 3 个:

    • 应用数据
    • CommonApplicationData
    • 本地应用程序数据

    通常那里的数据应该是特定于该用户的数据 - 当然,CommonApplicationData 除外。在用户之间共享,是“通用”前缀文件夹的用途。

    但是问题的其余部分没有意义。您希望用户手动将内容放在那里,以便网站可以上传吗?你似乎也认为它不是一个“正常”的文件夹?

    网站不能随机访问文件系统。因此,用户在那里导航真的很烦人。如果循环中还有另一个程序,你还没有告诉我们。

    而且文件夹很正常。操作系统存储了一个可以更改的路径(并且文件自动移动),但除此之外它是正常的。未知的位置是为什么您应该始终使用 https://docs.microsoft.com/en-us/dotnet/api/system.environment.specialfolder 从操作系统中检索实际值

    编辑:

    根据您的评论,我现在明白了。您正在编写一个网站。您想知道为什么服务器无法访问 AppData 文件夹。当然,直到现在我才正确地注意到 MVC。

    Web 服务器特别容易受到黑客攻击。 24/7 在线,一些众所周知的框架和广泛的可访问性作为核心目标。因此,它们通常在可能的最严格的用户权限下运行。

    对服务器程序和 Instances 内容目录的读取访问权限 - 不再有任何期望,也不应该被授予。可能在临时文件内容的子文件夹中写入访问权限 - 但有更好的解决方案,涉及数据库和 HTTP 处理程序。

    解决方案:

    如果您希望您的图片可用,请将它们放入此实例的 Content 目录的子文件夹中。但是,您确实应该被视为带有 HTTP 处理程序的数据库存储:https://www.red-gate.com/simple-talk/sql/learn-sql-server/an-introduction-to-sql-server-filestream/ 有些人甚至为图像提供了一个单独的专用 Web 服务器。但我怀疑你还没有达到那个规模。

    【讨论】:

    • App_Data 中的图像我似乎无法从我的网站访问,我不断收到 404
    • @MartinCooke 我现在明白并更新了我的答案。并不是 AppData 是特殊的 - 而是出于安全原因,服务器及其用户受到特别限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多