下载链接给我filenotfoundexception

时间:2012-09-06 20:12:46

标签: asp.net asp.net-mvc-3 controller download

在我的控制器中,这是我的代码

   public FileResult Download(string file)
    {



        var vFullFileName = HostingEnvironment.MapPath("~/App_Data/Files/");

        var files = uploadedfileRepository.AllIncluding();
        string filename = (from f in files

                           select f.FileName).First();


        return File(Path.Combine(vFullFileName, filename), "application/csv", filename);
    }

我把断点和文件指向正确的目录,但是为什么还要给我File找不到异常?

在我看来这就是我所拥有的

 <td>
            @Html.ActionLink("Download", "Download", new { id = item.FileName})
        </td

2 个答案:

答案 0 :(得分:0)

App_Data用于MS SQL Server访问的数据库文件,可能是您的应用程序自己的数据文件(如Lucene索引)。

IIS(和ASP.NET)配置为阻止对该目录的任何客户端请求。

解决方案就是将文件移动到另一个目录。只需在您网站的根目录中创建一个新文件夹(例如“CsvFiles”)并链接到该文件夹​​。

那就是说,为什么不向CSV文件提供HTTP 301重定向(甚至直接链接)而不是通过您的应用程序提供它们?

更新:此答案不正确,因为通过MVC文件响应提供文件内容,用户的浏览器不会实际访问App_Data目录。

答案 1 :(得分:0)

您的action方法的参数名称为文件。但是你的HTML将有一个名为 id 的参数/查询字符串,而不是od文件,所以将你的视图代码更改为

@Html.ActionLink("Download", "Download", new { file= item.FileName})

另外要获取路径,请尝试此

string fullFilePath=Path.Combine(Server.MapPath("~/App_Data"),filename)
return File(fullFilePath,"application/csv",filename);