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 は有効な仮想パスではありません。

この URLhttp:/localhost/Images/PDF/150763-3.pdfをブラウザに投稿すると、ファイルが開かれます。このファイルをダウンロードするにはどうすればよいですか?

プラットフォーム MVC 4、IIS 8。

4

2 に答える 2

0

「{controller}/{action}/{id}」の形式でルート URL を使用する場合:

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 に答える