2016-09-03 4 views
1

В файловой системе успешно загружено изображение, и я хочу получить к нему доступ. Итак, я написал GET -методОбратное изображение из файловой системы

[HttpGet] 
public ActionResult Get(string id) { 
    var path = [email protected]"d:\smth\upload\{id}.jpeg"; 
    return File(path, "image/jpeg"); 
} 

Я абсолютно уверен, что есть файл в требуемом пути с требуемым именем, но в любое время попробовать создать File(path, "image/jpeg") я получаю Could no find file исключение. Похоже, у меня нет доступа к папкам за пределами wwwroot. Может, я пропустил что-то важное от working with static file article?

Так, может кто-нибудь объяснить, как вернуть изображение, хранящейся в файловой системе вне папки веб-сервера с помощью GET -метода

+0

В следующий раз используйте правильные метки, чтобы получить ответы! Теги asp.net-mvc для старого веб-стека MVC! использовать [тег: asp.net-core-mvc] для ASP.NET Core MVC !! – Tseng

ответ

4

Хотя то, что @Shyju говорит, правда, и что метод File помощник не принимает физический путь к файлу, PhysicalFile вспомогательный метод не имеет (см GitHub source).

[HttpGet] 
public ActionResult Get(string id) { 
    var path = [email protected]"d:\smth\upload\{id}.jpeg"; 
    return PhysicalFile(path, "image/jpeg"); 
} 
-1

Вы не можете, если вы можете, это будет означать всех во внешнем мире может сделать форму GET/POST и доступ к вашим файлам за пределами общей папки. Если кто-то загружает файл на ваш веб-сервер, он должен находиться в вашем каталоге tmp, с которым вы сможете получить доступ с помощью asp.

3

У метода File нет перегрузки, которая занимает физическое расположение. Существует один, который принимает виртуальный путь, для которого ваше изображение должно находиться под корнем веб-приложения.

Но есть another overload, который вы можете использовать для своего использования. Это принимает байтовый массив как первый аргумент метода File. Вы можете прочитать файл из доступного физического каталога (при условии, что ваш файл существует) и преобразовать его в массив байтов и передать его в метод File.

[HttpGet] 
public ActionResult Get(string id) 
{ 
    var path = [email protected]"d:\smth\upload\{id}.jpeg"; 
    byte[] bytes = System.IO.File.ReadAllBytes(path); 
    return File(bytes, "image/jpeg"); 
} 
+0

btw. ссылка на статью MSDN посвящена ASP.NET MVC (вы можете увидеть ее в пространстве имен System.Web. *), а не в ASP.NET Core MVC, который является полным переписанием веб-стека, который не имеет никакой зависимости от System.Web . * (и, следовательно, никакой зависимости от IIS) – Tseng

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