ASP.NET MVC - Есть ли метод контроллера, который возвращает изображение в ответе?

Как я могу создать метод контроллера под названием GetMyImage(), который возвращает изображение в качестве ответа (то есть содержимое самого изображения)?

Я думал об изменении типа возврата с ActionResult на string, но, похоже, он не работает должным образом.

Ответы

Ответ 1

Вернуть FilePathResult с помощью Файл метода контроллера

public ActionResult GetMyImage(string ImageID)
{
    // Construct absolute image path
    var imagePath = "whatever";

    return base.File(imagePath, "image/jpg");
}

Существует несколько перегрузок метода File. Используйте то, что наиболее подходит для вашей ситуации. Например, если вы хотите отправить заголовок Content-Disposition, чтобы пользователь получил диалог SaveAs вместо того, чтобы видеть изображение в браузере, вы должны передать третий параметр string fileDownloadName.

Ответ 2

Ознакомьтесь с классом FileResult. Например, использование см. здесь.

Ответ 3

Вы можете использовать FileContentResult следующим образом:

byte[] imageData = GetImage(...); // or whatever
return File(imageData, "image/jpeg");

Ответ 4

using System.Drawing;
using System.Drawing.Imaging;     
using System.IO;

public ActionResult Thumbnail()
{
    string imageFile = System.Web.HttpContext.Current.Server.MapPath("~/Content/tempimg/sti1.jpg");
    var srcImage = Image.FromFile(imageFile);
    var stream = new MemoryStream();
    srcImage.Save(stream , ImageFormat.Png);
    return File(stream.ToArray(), "image/png");
}

Ответ 5

Просто попробуйте один из них в зависимости от вашей ситуации (скопированный из здесь):

public ActionResult Image(string id)
{
    var dir = Server.MapPath("/Images");
    var path = Path.Combine(dir, id + ".jpg");
    return base.File(path, "image/jpeg");
}


[HttpGet]
public FileResult Show(int customerId, string imageName)
{
    var path = string.Concat(ConfigData.ImagesDirectory, customerId, @"\", imageName);
    return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg");
}