2017-01-25 2 views
0

Контроллер:Возврат изображения от контроллера

public ActionResult Beacon(string value) 
{ 
    var dir = Server.MapPath("/Content/Images/Sprites/"); 
    var path = Path.Combine(dir, "logo.png"); 
    return base.File(path, "image/png"); 

} 

Сгенерированный HTML:

<img style="-webkit-user-select: none" src="http://localhost:38315/Beacon/999"> 

Однако не отображается изображение. В Chrome это небольшая коробка с серыми границами, а в MS Edge есть ящик с «X», который я предполагаю, это изображение «Файл не найден».

Я попытался вернуть разные изображения (чтобы убедиться, что первый из них не поврежден), несколько типов контента, но без везения.

Я уверен, что существуют разные файлы, которые я пробовал.

Я прочитал этот пост: ASP.Net MVC - Img Src Server Path

Я попытался это:

return File("~/images/beacon.png", "image/png"); 

Я попытался возвращающую строку Base64, но не повезло.

Когда я запускаю этот код говорится, что файл действительно существует:

var dir = Server.MapPath("/images"); 
var path = Path.Combine(dir, "beacon.png"); 
var res = System.IO.File.Exists(path); 
return base.File(path, "image/png"); 

Как я могу вернуть простое изображение через контроллер?

* Willy David Jr Предложение *

public ActionResult Beacon(string value) { 

var path = Server.MapPath(Url.Content("~/Content/Images/Sprites/")) + "logo.png"; 
var theFile = new FileInfo(path); 

if (theFile.Exists) { 
    return File(System.IO.File.ReadAllBytes(path), "image/png"); 
    //or return base.File(path, "image/png"); 
} 
    return this.HttpNotFound();     
} 

enter image description here

enter image description here

+1

ли ударил его действия при отладке? Убедитесь, что путь к изображению - это карты для действия. Кроме того, сделайте 'System.IO.File.Exsits (путь)' на пути и убедитесь, что существует производный путь. Скорее всего, вы неправильно создаете путь. – Nkosi

+0

@Nkosi Обновленный ответ. «res» истинно, т. е. кажется, существует. – Jefecito

ответ

0

Попробуйте сделать следующее и посмотрите, если это применимо к вашей ситуации.

public ActionResult Beacon(string value) { 
    var dir = Server.MapPath("/Content/Images/Sprites/"); 
    var path = Path.Combine(dir, "logo.png"); 
    var theFile = new FileInfo(path); 
    if (theFile.Exists) { 
     return File(System.IO.File.ReadAllBytes(path), "image/png"); 
    } 
    return this.HttpNotFound();     
} 
+0

благодарит за комментарий. Он возвращает en error image i.e "theFile.Exists" проходит. =/ – Jefecito

+0

Вы отлаживаете это с точкой останова? – Nkosi

+0

Да, сэр. И он утверждает то же, что файл существует, и дает путь, который существует. – Jefecito

0

Попробуйте сделать это:

public ActionResult Beacon(string value) { 

var path = Server.MapPath(Url.Content("~/Content/Images/Sprites/")) + "logo.png"; 
var theFile = new FileInfo(path); 

if (theFile.Exists) { 
    return File(System.IO.File.ReadAllBytes(path), "image/png"); 
    //or return base.File(path, "image/png"); 
} 
    return this.HttpNotFound();     
} 
+0

Спасибо за ваше предложение, но, к сожалению, нет. Я отредактировал свой вопрос и добавил несколько скриншотов, используя ваше решение. – Jefecito