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