2013-05-16 2 views
2

Я делаю что-то неправильно здесь, но не в состоянии понять это. У меня есть виртуальный каталог и файлы внутри него, и я хочу загрузить файл.Загрузка файла из виртуального каталога

Мой код:

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 is not a valid virtual path.

Если я отправляю этот URL http:/localhost/Images/PDF/150763-3.pdf в моем браузере, файл открывается. Как загрузить этот файл?

Платформа MVC 4, IIS 8.

+0

На какой строке кода вы получаете эту ошибку? –

+0

ошибка в Global.asax в методе Application_Error() –

+0

С IIS 7.5 работает нормально. – misak

ответ

0

Это должно быть http://localhost/Images/PDF/150763-3.pdf (вместо HTTP: /)

Chrome изменится HTTP:/к HTTP: //, но ваша программа не будет.


Я думаю, что я неправильно понял ваш вопрос.

Try (фиксированный от комментариев)

return File(FullfilePhysicalPath, "Application/pdf", DateTime.Now.ToLongTimeString()+".pdf"); 
+0

Если я отлаживаю свой код и накладываю мышь на FullFileLogicalPath (в боковом условии), он показывает мне «http: \\\\ localhost \\ Images \\ PDF \\ 150763-3.pdf», и если я нажму на кнопку всплывающей подсказки, внутри Text Visualizer показывает мне http: \\ localhost \ Images \ PDF \ 150763-3.pdf, итак где проблема? где мне не хватает «/»? –

+0

Я попробовал ваше решение для добавления «.pdf» в конце, но все еще не работает, в методе Global.asax Application_Error(). Я получаю исключение «http: /localhost/Images/PDF/150771-1.pdf» не действительный виртуальный путь. Я не понимаю, как http: // преобразован в http: /? –

+1

Почему вы не используете FullfilePhysicalPath? – laktak

0

Если вы хотите использовать маршруты URL в формате: "{контроллер}/{действие}/{ID}":

Там классно RouteConfig определен ~ /App_Start/RouteConfig.cs в MVC 4 У вас есть действие ImageController и PDF, а 150763-3.pdf - идентификатор параметра.

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" }); 
      } 

     } 
} 
+0

Я сделал то же самое (поставьте [ActionName («PDF»)] чуть выше моего действия), все же он показывает мне ту же ошибку «http:/localhost/Images/PDF/150763- 3.pdf не является допустимым виртуальным путем. " –

+0

Это любопытно. Мой код работает отлично. ... Какая строка вызывает исключение? – misak

+0

получение ошибки в Global.asax в методе Application_Error() –

Смежные вопросы