我的MVC应用程序在运行时创建图像,我不需要保存在磁盘上。
将这些内容发送到请求浏览器的最佳方法是什么? 请注意,图像永远不会相同,因此没有理由先将它们保存在磁盘上。
服务器将绘制随机图像并将图像返回给调用客户端。我试图了解这种操作的最佳格式是什么(位图,图像......),以便流回服务器尽可能顺畅和快速。
答案 0 :(得分:1)
如果您可以获取位图的字节,那么很容易将其返回给客户端
public ActionResult GetImage()
{
byte[] byteArray = MagicMethodToGetImageData();
return new FileContentResult(byteArray, "image/jpeg");
}
此外,如果要返回图像加上一些数据,可以将字节编码为base64并将其包装为JSON,如下所示:
public ActionResult GetImage()
{
byte[] byteArray = MagicMethodToGetImageData();
var results = new
{
Image = Convert.ToBase64String(byteArray),
OtherData = "some data"
};
return Json(results);
}
答案 1 :(得分:1)
一种可能性是使用FileContentResult class来读取文件内容并直接显示或提供下载。解决方案可能如下所示:
private FileContentResult getFileContentResult(string name, bool download = true)
{
if (!string.IsNullOrEmpty(name))
{
// don't forget to set the appropriate image MIME type
var result = new FileContentResult(System.IO.File.ReadAllBytes(name), "image/png");
if (download)
{
result.FileDownloadName = Server.UrlEncode(name);
}
return result;
}
return null;
}
在某些 Action 中使用此方法,如下所示:
public ActionResult GetImage(string name)
{
return getFileContentResult(name, true);
// or use the image directly for example in a HTML img tag
// return getFileContentResult(name);
}
这门课程相当健壮,速度很快 - 我在使用它时有很好的经验。
答案 2 :(得分:1)
如果您在创建它的同一页面中发送它们,则可以修改您的响应以直接发送它。
//After having your bitmap created...
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.PNG);
bmp.Dispose();
byte[] data = ms.ToArray();
Response.ContentType = "image/png";
Response.ContentLength = data.Length;
using(var str = Response.GetResponseStream())
str.Write(data, 0, data.Length);
Response.End();