Скачать файл с сайта ASP.NET MVC 2 - PullRequest
4 голосов
/ 01 марта 2011

В настоящее время я пытаюсь реализовать контроллер, с которого вы можете загружать файлы (в частности, jar-архивы).Файлы хранятся на диске, а не в базе данных.До сих пор я придумал это:

public FilePathResult GetFile(String fileName) 
{    
   return File(Path.Combine(Server.MapPath("~/App_Data/Bundles"), fileName), "application/java-archive");
}

Не обращайте внимания на отсутствие обработки ошибок и тому подобное на данный момент.Файл действительно скачивается таким образом, но получает неправильное имя.Вместо, например, «sample.jar», файл получает имя контроллера «GetFile» (без расширения).

Есть идеи, что я делаю неправильно?

Ответы [ 4 ]

8 голосов
/ 01 марта 2011

Используйте перегрузку, которая позволяет указать fileDownloadName.

return File(Path.Combine(Server.MapPath("~/App_Data/Bundles"), fileName),
            "application/java-archive", 
            fileName);
2 голосов
/ 01 марта 2011

Если они просто хранятся на диске, а вы ничего не делаете, кроме как просто обслуживаете их, зачем вообще их маршрутизировать с использованием контроллера? Вы должны просто поместить их, например, в ~/Content/Bundles и связать их напрямую.

Тогда вам не нужно беспокоиться о дополнительной обработке ошибок / безопасности для параметра filename. Также обычно плохая практика - обслуживать файлы прямо из App_Data, потому что, как правило, это место для файлов, которые не должны быть общими.

1 голос
/ 25 августа 2011

Проверьте эту ссылку, она работает как опция для загрузки файлов, используя MVC 3

http://haacked.com/archive/2008/05/10/writing-a-custom-file-download-action-result-for-asp.net-mvc.aspx

1 голос
/ 01 марта 2011

У File есть перегруженная версия, я имею в виду, что вам нужно добавить третий аргумент с именем файла.

return File(Path.Combine(Server.MapPath("~/App_Data/Bundles"), fileName), 
       "application/java-archive", "putFileNamehere.extension");

Теперь, putFileNamehere.extension будет показано пользователю в диалоге загрузки файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...