3

我在这里做错了什么,但无法弄清楚。我有一个虚拟目录和其中的文件,我想下载该文件。

我的代码:

public ActionResult DownloadFile()
{
    string FileName = Request.Params["IMS_FILE_NAME"];
    string FullFileLogicalPath = Path.Combine(ConfigurationManager.AppSettings["VIRTUAL_DIR_PATH"], FileName);
    string FullfilePhysicalPath = Path.Combine(ConfigurationManager.AppSettings["PHYSICAL_DIR_PATH"], FileName);
    if (System.IO.File.Exists(FullfilePhysicalPath))
    {
        return File( FullFileLogicalPath , "Application/pdf", DateTime.Now.ToLongTimeString());
    }
    else
    {
        return Json(new { Success = "false" });
    }
}

我收到一个错误:

http:/localhost/Images/PDF/150763-3.pdf 不是有效的虚拟路径。

如果我在浏览器中发布此 URL http:/localhost/Images/PDF/150763-3.pdf,则会打开该文件。我怎样才能下载这个文件?

平台 MVC 4、IIS 8。

4

2 回答 2

0

如果您想使用以下格式的路由 url:“{controller}/{action}/{id}”:

在 MVC 4 中定义了类 RouteConfig ~/App_Start/RouteConfig.cs 你有 ImageController 和 PDF 动作,150763-3.pdf 是参数 id。

http://localhost/Images/PDF/150763-3.pdf

解决方法很简单:

public class ImagesController : Controller
    {
        [ActionName("PDF")]
        public ActionResult DownloadFile(string id)
        {
            if (id == null)
                return new HttpNotFoundResult();

            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
            string FileName = id;

            string FullFileLogicalPath = Path.Combine(ConfigurationManager.AppSettings["VIRTUAL_DIR_PATH"], FileName);
            string FullfilePhysicalPath = Path.Combine(ConfigurationManager.AppSettings["PHYSICAL_DIR_PATH"], FileName);
            if (System.IO.File.Exists(FullfilePhysicalPath))
            {
                return File(FullFileLogicalPath, "Application/pdf", FileName);
            }
            else
            {
                return Json(new { Success = "false" });
            }

        }
}
于 2013-05-16T12:44:19.403 回答
0

它应该是http://localhost/Images/PDF/150763-3.pdf(而不是 http://)

Chrome 会将 http:/ 更改为 http:// 但您的程序不会。


我想我误读了你的问题。

尝试(从评论中修复)

return File(FullfilePhysicalPath, "Application/pdf", DateTime.Now.ToLongTimeString()+".pdf");
于 2013-05-16T11:06:55.047 回答