2011-09-02 71 views
3

我有一个运行在Windows Server 2003 IIS 6.0上的ASP.NET MVC 1.0应用程序。如何使用ASP.NET MVC 1.0从文件系统直接提供文件?

我刚刚添加了一项新功能,可让用户将文件上传到服务器。我还添加了一个页面,显示该用户上传的文件列表。

问题是当有人点击查看文件时,出现以下错误: 系统找不到指定的文件。

我已经验证了一切正确,我无法弄清楚我的生活。

我将此代码添加到路由部分,认为这可能与它有关,但它没有帮助。

routes.RouteExistingFiles = false; 
routes.IgnoreRoute("App_Data/Uploads/{*pathInfo}"); 

任何帮助将不胜感激。

回答

4

存储在App_Data文件夹中的文件不能由客户端直接访问。 ASP.NET块访问它。所以不需要为这个特殊文件夹添加任何忽略路由,你不能使用这样的网址/App_Data/Uploads/foo.txt。如果你想从这个文件夹提供文件服务,你需要写一个控制器动作会从物理位置读取的文件,并返回到客户端:

public ActionResult Download(string id) 
{ 
    // use the id and read the corresponding file from it's physical location 
    // and then return it: 
    return File(physicalLocation, mimeType); 
} 

,然后使用:

<%= Html.ActionLink("download report", "download", new { id = 123 }) %> 
+0

更直接使用请求过滤来阻止访问“App_Data”目录的IIS。所以如果有人编辑请求过滤的隐藏段,App_Data的内容可以看到。 –

2

尝试增加忽略路线(使他们不通过路由回去只是担任)

routes.IgnoreRoute("{file}.txt"); 
0

什么是正在下载的确切文件类型?默认情况下,IIS6及更高版本阻止未知MIME类型被下载。这可以防止开发人员或网站管理员无意中遗留可能包含敏感信息的一些文件的可能的安全问题。

这里有一个关于如何启用下载文件知识库文章: http://support.microsoft.com/default.aspx?scid=kb;en-us;326965

BTW,你应该不需要更改任何路由设置。默认路由设置启用所有文件下载(假定IIS被配置为允许它)。

相关问题