我有一个在Windows Server 2003 IIS 6.0上运行的ASP.NET MVC 1.0应用程序。
我刚添加了一项新功能,可让用户将文件上传到服务器。我还添加了一个页面,显示该用户上传的文件列表。
问题是当有人点击查看文件时,我收到以下错误: 该系统找不到指定的文件。
我已经验证了一切都是正确的,我无法想象我的生活。
我将此代码添加到路由部分,认为可能与它有关,但它没有帮助。
routes.RouteExistingFiles = false;
routes.IgnoreRoute("App_Data/Uploads/{*pathInfo}");
非常感谢任何帮助。
答案 0 :(得分:6)
客户端无法直接访问存储在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 }) %>
答案 1 :(得分:2)
尝试添加忽略路由(以便它们只是在不经过路由的情况下提供)
routes.IgnoreRoute("{file}.txt");
答案 2 :(得分:0)
正在下载的确切文件类型是什么?默认情况下,IIS6和更高版本阻止未知MIME类型可下载。这可以防止可能出现的安全问题,即开发人员或站点管理员无意中遗留了一些可能包含敏感信息的文件。
这是一篇关于如何启用下载文件的知识库文章: http://support.microsoft.com/default.aspx?scid=kb;en-us;326965
顺便说一下,您不需要更改任何路线设置。默认路由设置允许所有文件下载(假设IIS配置为允许它)。