点击Sitecore媒体链接后,我需要强制下载操作。我没有找到任何有用的Sitecore如何实现这一点。
在Sitecore配置中,您可以定义强制下载哪些mime类型。但问题是,如果你想为图像做这件事。因为如果你这样做
<mediaType name="JPEG image" extensions="jpg, jpeg, jpe">
<mimeType>image/jpeg</mimeType>
<forceDownload>true</forceDownload>
</mediaType>
所有图片都会消失,因为浏览器无法以HTML格式显示它们!
如何在点击时强制下载所有Sitecore媒体文件?
答案 0 :(得分:1)
在使用反编译器对Sitecore的代码进行一些调查后,我认为最好的方法是扩展Sitecore MediaRequestHandler。
但是如何识别我是否要呈现图像并下载图像?我们必须在URL中添加查询字符串参数,例如“dl = 1”
public class MediaRequestHandler : Sitecore.Resources.Media.MediaRequestHandler, System.Web.SessionState.IRequiresSessionState
{
protected override bool DoProcessRequest(HttpContext context, MediaRequest request, Media media)
{
// identify query string param from requested URL
bool isDownload = Utils.UrlUtils.HasQueryParam(context.Request.Url, "dl", "1");
if (isDownload)
{
using (MediaStream stream = media.GetStream())
{
// we have to check if file is not already force downloaded by Sitecore
if (!stream.ForceDownload)
{
string mediaName = media.MediaData.MediaItem.Name + "." + media.MediaData.Extension;
context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + mediaName + "\"");
}
context.Response.AddHeader("Content-Length", stream.Length.ToString());
}
}
// it must be called after all logic
return base.DoProcessRequest(context, request, media);
}
}
代码的一些评论: