PDF在sitecore中转换为.ashx无法使用IE打开

时间:2011-03-30 13:50:07

标签: pdf adobe sitecore acrobat

与Sitecore中的所有媒体文件一样,扩展程序将转换为.ashx,这对于使用IE和acrobat reader时访问我网站的访问者来说是一个问题。基本上用户点击下载链接,当前页面加载表明即将发生的事情,但什么也没有打开。我是否正确地说Adobe Acrobat在寻找.pdf的时候遇到了.ashf扩展问题,所以它只是放弃了?如果是这种情况,那我该如何解决呢?

凯尔

3 个答案:

答案 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