与Sitecore中的所有媒体文件一样,扩展程序将转换为.ashx,这对于使用IE和acrobat reader时访问我网站的访问者来说是一个问题。基本上用户点击下载链接,当前页面加载表明即将发生的事情,但什么也没有打开。我是否正确地说Adobe Acrobat在寻找.pdf的时候遇到了.ashf扩展问题,所以它只是放弃了?如果是这种情况,那我该如何解决呢?
凯尔
答案 0 :(得分:5)
我认为这可能是一个常见问题。您使用的是哪个版本的Sitecore? SDN上有各种各样的讨论:
我会检查上面第一个链接中提到的MIME类型。
答案 1 :(得分:2)
只是旁注:
Firefox for Mac有直接处理.ashx文件的一般问题(即直接链接到它们)。
这通常是PDF格式的内容,因为它会尝试打开.ashx文件,而不会检查内容处理。
请注意Mac上Firefox的问题,因为PDF似乎无法在那里工作。
为此,您需要根据以下内容设置一些内容:
http://sdn.sitecore.net/scrapbook/media%20files%20downloaded%20with%20ashx%20extension.aspx
如果您无法访问,基本上会告诉您转到web.config,请找到:
<mediaType name="PDF file" extensions="pdf">
并更改
<forceDownload>false</forceDownload>
到
<forceDownload>true</forceDownload>
答案 2 :(得分:2)
true会强制任何类型的浏览器下载pdf ...
这是最终的解决方案:
制作C#类
public class MediaHandler : MediaRequestHandler
{
public override void ProcessRequest(HttpContext context)
{
DeterminePDFRequest(context);
base.ProcessRequest(context);
}
private static void DeterminePDFRequest(HttpContext context)
{
MediaRequest request = MediaManager.ParseMediaRequest(context.Request);
if (request != null)
{
Media media = MediaManager.GetMedia(request.MediaUri);
if (media != null)
{
Item item = media.MediaData.MediaItem;
MediaItem mediaItem = media.MediaData.MediaItem;
if (mediaItem != null)
{
if (context.Request.UserAgent != null)
{
if (mediaItem.Extension != "pdf")
return;
string requestedUrl = context.Items["SC_REQUEST_MEASUREMENT_URL"].ToString();
if (!requestedUrl.Contains(".pdf"))
{
MediaUrlOptions mediaUrlOptions = new MediaUrlOptions
{
AbsolutePath = true,
DisableMediaCache = true,
DisableBrowserCache = true
};
string url = StringUtil.EnsurePrefix('/',
MediaManager.GetMediaUrl(mediaItem,
mediaUrlOptions));
url = url.Replace(".ashx", ".pdf");
QueryString queryString = new QueryString(url);
context.Response.Redirect(queryString.All);
}
}
}
}
}
}
}
请务必替换并更新web.config中的verb="*" path="sitecore_media.ashx"
以使用您的MediaHandler