在asp.net mvc应用程序中放置静态文件的最佳位置是什么?

时间:2012-01-17 06:22:29

标签: asp.net-mvc-3

例如,我在路径D:/myprojects/sample中有一个Asp.net MVC应用程序,我在E:/files中放置了静态文件。

我不想在内容文件夹中放置静态文件,因为静态文件的大小非常大。是否可以在我的应用程序中使用E:/files中的文件?怎么样?

我想在框架内显示静态html文件,如下所示

< iframe id="content-frame" src="E:/files/index.html" width="100%" frameborder="0">

但我在Firefox中得到提醒,因为“Firefox不知道如何打开此地址,因为协议(e)与任何程序无关”。

如果在IIS中创建虚拟目录,是否可以解决此问题?

感谢您的回复。

4 个答案:

答案 0 :(得分:2)

这实际上取决于这些“静态”文件的性质以及客户,或者您确实希望用它们做什么。

如果只是在服务器上访问它们,那么无关紧要,只要该进程运行的标识具有必要的权限。

如果客户端要访问它们,那么您需要提供这些文件。

如果它们是HTML文件,那么您可以将它们转储到您想要的任何文件夹中。 Content文件夹对我来说似乎是一个合理的位置,所以我很想知道你为什么“不想”。

图像和其他东西,当然也有文件夹。

但是,您必须考虑这些静态文件是否在网站部署过程之外更新。如果是这样,那么请考虑IIS中的一个简单虚拟目录,指向这些文件就地更新的位置 - 这样您就不必担心它们了。

在我看来,使用路由并通过控制器传递请求作为最后的手段,因为它会直接使IIS容易服务的文件的请求管道变得不必要。

答案 1 :(得分:1)

您可以将它放在任何地方。

在IIS中,您可以拥有指向该地址的virtualDirectory。

例如,

让您的静态文件位于“E:/ files”

在IIS中 - &gt; YourWebSite - &gt;添加一个VirtualDirectory(比如说“content”并指向“E:/ files”。

现在您可以从外面访问它,例如

http://YourWebSite/content/myimg.png

它将表现为文件放在同一目录中。

答案 2 :(得分:1)

只要您拥有权限,就可以将文件存储在文件系统中的任何位置。但是,将它们保存在应用程序目录中通常是有意义的。

一个好地方是根目录中的App_Data文件夹。原因是因为无法通过HTTP直接访问App_Data文件夹中的文件 - 服务器返回404错误。如果您将来需要限制对这些文件的访问权限仅限于授权用户,这可能很有用。

由于您正在使用MVC,因此您需要在此文件夹中设置到服务器文件的路径,如下所示:

public FilePathResult GetFile(string path)
{
    return File(Path.Combine(Server.MapPath("~/App_Data/"), path), "image/jpeg");
}

然后可以在您的标记中使用文件,如:

@Url.Action("GetFile", new { controller = "Files", path = "myimage.jpg" })

你可能不想直接传递文件路径,因为这只是一个例子(可能会传入一个id),但你会知道它是如何工作的。

答案 3 :(得分:0)

修改 - 有关App_Data What is the App_Data folder used for in Visual Studio?

的更多详情

您可以使用

App_Data
我认为这是存储静态内容的绝对位置。