[英]Render database image from MVC Controller Action
我有一个邮寄活动,它会生成HTML电子邮件,这些电子邮件会定期发送给客户。
最近,我更改了系统,以允许最终用户配置邮件快照中某些图像元素的配置,而不是静态配置。 这些图像使用GUID ID存储在数据库中,并通过Controller Action加载,如下所示:
[HttpGet]
[OutputCache(Duration = 3600, Location = OutputCacheLocation.Client, VaryByParam = "id")]
public virtual ActionResult Image(Guid id)
{
FileItem picture = FileService.GetItem(id);
return picture != null ? File(picture.FileData, picture.ContentType) : null;
}
如果电子邮件无法在电子邮件客户端中正确呈现,则可以使用一个链接在浏览器中查看相同的邮件。
在浏览器中,所有图像均正确加载并显示,但是我的问题出在电子邮件客户端(在本例中为Outlook 2013和Outlook 2010)中,其中通过上述方法引用的图像不会仅加载静态图像。
例如,加载良好的图像元素将是一个静态文件,例如:
<img src="http://www.foo.com/es/spacer6.gif" width="1" height="8" border="0" alt="" />
不会正常加载的元素如下所示:
<img src="http://www.foo.com/Packages/Image/0c6d126d-8f62-4e28-9963-7377e73c0482" style="border-style:solid;border-bottom-width:1;border-right-width:1;border-top-width:1;border-left-width:1;border-color:#333;" alt="..." />
因此,两者都来自同一个域,只有一个是静态的,并且一个是通过上述控制器操作加载的。 我猜想Outlook客户端不喜欢这是一个到外部“资源”的链接这一事实,因为它不知道它是仅基于URL的图像。
无论如何,是否有将我的控制器操作更改为“欺骗” Outlook的方式,以为这仅仅是静态图像URL,还是有更好的方法来做到这一点?
我使用下一个代码舞会puresourcecod.com:
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
...
public ActionResult Hello(string text)
{
//Create new image
Image img = new Bitmap(100, 50);
Graphics g = Graphics.FromImage(img);
//Do some drawing
Font font = new Font("Arial", 24);
PointF drawingPoint = new PointF(10, 10);
g.DrawString(text, font, Brushes.Black, drawingPoint);
//Return Image
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Png);
ms.Position = 0;
return new FileStreamResult(ms, "image/png");
}
首先,确保picture.ContentType
包含其应包含的内容(例如,如果图像是PNG,则为“ image / png”)。
否则,Outlook可能依赖于具有“正确的”扩展名。 要找出答案,您可以在guid-URL中添加适当的扩展名,然后使用以下命令:
public virtual ActionResult Image(string id)
{
string s = id.Substring(0, id.IndexOf(".")); // a "." is now required
Guid guid = Guid.Parse(s);
FileItem picture = FileService.GetItem(guid);
return picture != null ? File(picture.FileData, picture.ContentType) : null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.