C# 如何检索App_数据文件夹中的文件

C# 如何检索App_数据文件夹中的文件,c#,asp.net,webforms,C#,Asp.net,Webforms,所以很多人都说,不要将文件存储在数据库中,而是将它们(实际文件)保存在服务器文件夹中,并将文件的路径保存到数据库中 问题是文件可以通过URL直接访问。例如,如果我将iamge放入名为:img的文件夹,则人们可以通过以下url轻松访问它: 我的web应用程序将有很多图像和文档,只有在您登录后才可用 我把它们放在App_数据文件夹中,因为它是一个安全的文件夹,以避免未经授权的用户访问它们,但猜猜我在代码中无法检索到什么 例如:我无法获取用户的个人资料图片并将其显示到页面 SQL数据库: .aspx

所以很多人都说,不要将文件存储在数据库中,而是将它们(实际文件)保存在服务器文件夹中,并将文件的路径保存到数据库中

问题是文件可以通过URL直接访问。例如,如果我将iamge放入名为:img的文件夹,则人们可以通过以下url轻松访问它:

我的web应用程序将有很多图像和文档,只有在您登录后才可用

我把它们放在App_数据文件夹中,因为它是一个安全的文件夹,以避免未经授权的用户访问它们,但猜猜我在代码中无法检索到什么

例如:我无法获取用户的个人资料图片并将其显示到页面

SQL数据库:

.aspx页面:

<asp:Image ID="imgProfile" runat="server" Width="150" Height="150" ToolTip="Profile Picture" />
浏览器(Chrome)说:


那么这里最好的解决方案是什么,看起来我必须把它们放在数据库中…

AppData是一个依赖于用户的系统目录。
可以在
c:\users\[username]\appdata

您应该注意正在访问哪个appdata forlder IIS,因为它可能是在与您的桌面不同的用户下运行的
现在,让appdata内容在您的webapp上可用是一种非常糟糕的做法。

正确的方法是,如果您坚持要隐藏图像,则必须创建一个处理程序(.ashx),该处理程序将读取图像文件并返回。

这很有意义,不是吗?您不希望通过URL访问它,转发URL就是
的全部功能。无论如何,您不应该在此处使用Server.MapPath。Public无法访问存储在App_数据中的文件。如果图像存储在App_数据中,则需要通过处理程序访问它们。仅供参考:图像可以存储在数据库中,但不建议使用大文件。@HenkHolterman Right我删除了Server.MapPath,但如果我不将图片fle放入App_数据文件夹,人们可以在知道URL后随时访问它(他们只需检查图片即可获得)。我只希望登录用户可以访问它。当
可以显示它时,人们可以访问它。因此,您需要另一个控件,请参阅@Sam的答案。请提供处理程序的示例(它如何从文件夹中获取文件,以便我可以将文件放入其他文件夹而不是app_数据),这个概念对我来说是全新的。Sam不必提供示例,网站上已经有很多。谷歌就是这样。
   //Get name and path and save to ProfilePicture object
   //.....
   imgProfile.ImageUrl = ProfilePicture.path + ProfilePicture.name;
Not allowed to load local resource: file:///C:/users/..../App_Data/User/userPicture/1/photo.JPG localhost:55700/Modules/User/Account/ProfilePicture.aspx:196
Failed to load resource: the server responded with a status of 404 (Not Found)