我们有一个umbraco MVC网站,我们正在尝试使用ImageResizer。为了将上传的文件保留在可公开访问的区域之外,图像存储在webroot之外,我们使用控制器将它们传送到浏览器(例如,页面上的图像URL将类似于<img src="/umbraco/surface/AttachmentSurface/ShowImage/999?" alt="Here there be an image, yarrr!">
)
ShowImage操作类似于:
public ActionResult ShowImage(int id)
{
using (DBContext db = new DBContext())
{
Attachment a = db.Attachments.FirstOrDefault(x.ID == id);
if (a != null)
{
byte[] file = System.IO.File.ReadAllBytes(System.IO.Path.Combine(System.Configuration.ConfigurationManager.AppSettings["UploadPath"], a.Path, a.FileName));
return this.File(file, a.MimeType);
}
}
}
如果我们在可公开访问的图片(例如<img src="/images/kitty.jpg?width=33&height=33&mode=crop" alt="Here there be kitties, yarrr!">
)上使用网址API,那么一切都按预期工作。
但是,我们尝试使用URL API来调整控制器提供的图片大小无效(例如<img src="/umbraco/surface/AttachmentSurface/ShowImage/999?width=33&height=33&mode=crop" alt="Here there be an image, yarrr!">
)。
这是解决此问题的唯一方法吗?在交付之前使用托管API并调整图像大小?我似乎记得文档说明了在MVC Action中使用它的一个坏主意......
感谢您的帮助。
答案 0 :(得分:0)
如果您只是试图阻止对原始文件的访问,则可以通过多种方式执行此操作,而无需将文件移动到根目录之外(UrlAuthorization,AuthorizeRequest事件,禁用该文件夹的处理程序等)。
如果要控制图像的来源,则应实现IVirtualImageProvider类。 ImageResizer包含一个IVirtualImageProvider插件(named VirtualFolder),可以提供对外部/外部根文件的访问。如果您的需求是基本的,请尝试一下,然后放弃MVC操作。