如何在考虑磁盘缓存的同时调整 Azure 图像的大小?
How do I resize an image from Azure while also considering the disk-cache?
我目前正在尝试在我的网站上生成包含大量图像的 PDF 报告。所有这些图像都以其原始大小存储在 Azure blob 存储中。
在整个网站上,我都在使用带有 Azure 和 DiskCache 插件的 ImageResizer 中间件,它们工作得很好,但是对于 PDF 报告,我似乎必须使用 ImageResizer API,它只接受一个流、位图或路径作为输入。
我当前的实现在技术上可行(下载 blob 并提供流),但速度非常慢。
有没有办法在使用磁盘缓存的同时调用 API?我尝试提供 /azure/someblob.jpg 之类的路径,但它不起作用。
编辑:根据 Natahniel 的建议,我提出了这个解决方案(用于 iTextSharp):
private Image GetImageResized(string path) {
var request = HttpContext.Current.Request.Url;
var uri = new Uri(request.Scheme + "://" + request.Authority + "/" + path, UriKind.Absolute);
Stream dest = null;
using (var client = new WebClient()) {
dest = new MemoryStream(client.DownloadData(uri));
}
return iTextSharp.text.Image.GetInstance(dest);
}
本例中的路径类似于 azure/mycontainer/someblob.jpg?height=500
应该是 /azure/path/to/document.pdf?format=png&page=1
HTTP API 支持 Azure-provided PDF blob 的磁盘缓存,这最适合这种情况。
我目前正在尝试在我的网站上生成包含大量图像的 PDF 报告。所有这些图像都以其原始大小存储在 Azure blob 存储中。
在整个网站上,我都在使用带有 Azure 和 DiskCache 插件的 ImageResizer 中间件,它们工作得很好,但是对于 PDF 报告,我似乎必须使用 ImageResizer API,它只接受一个流、位图或路径作为输入。
我当前的实现在技术上可行(下载 blob 并提供流),但速度非常慢。
有没有办法在使用磁盘缓存的同时调用 API?我尝试提供 /azure/someblob.jpg 之类的路径,但它不起作用。
编辑:根据 Natahniel 的建议,我提出了这个解决方案(用于 iTextSharp):
private Image GetImageResized(string path) {
var request = HttpContext.Current.Request.Url;
var uri = new Uri(request.Scheme + "://" + request.Authority + "/" + path, UriKind.Absolute);
Stream dest = null;
using (var client = new WebClient()) {
dest = new MemoryStream(client.DownloadData(uri));
}
return iTextSharp.text.Image.GetInstance(dest);
}
本例中的路径类似于 azure/mycontainer/someblob.jpg?height=500
应该是 /azure/path/to/document.pdf?format=png&page=1
HTTP API 支持 Azure-provided PDF blob 的磁盘缓存,这最适合这种情况。