2009-03-25 1 views
0

У меня есть веб-сайт с несколькими файлами PDF. Мне нужно, чтобы некоторые из них были заблокированы со стандартной аутентификацией ASP.NET (в папке с web.config, которая запрещает анонимным пользователям).Управление разрешениями PDF с помощью ASP.NET - Timeout Issue

я установил PDF-файлы, чтобы обрабатываемые рабочим процессом ASP.NET и добавил:

<add type="System.Web.StaticFileHandler" path="*.pdf" verb="*" /> 

к моей web.config, но по какой-то причине они зависать при загрузке. Я видел эту проблему раньше на старом сервере, и для жизни меня не помню, что я сделал, чтобы решить эту проблему. Кто-нибудь есть идеи?

Спасибо.

+0

Я не делаю этого (я делаю поток pdf-файлов); Я бы предложил установить скрипач и посмотреть, что сходит с сервера и с какой скоростью. По крайней мере, вы получите некоторую информацию для работы. Кроме того, можно ли заблокировать файлы PDF? – Will

ответ

0

Я бы открыл скрипач и посмотрел, какие запросы действительно отправляются на сервер и какие ответы есть. Это может также зависеть от того, как вы на самом деле запрашиваете (т. Е. Путь) и как вы обслуживаете PDF. Я демонстрирую, как возвращать PDF-документы, защищенные паролем, в одном из моих электронных книг WROX, а также в моих обработчиках и модулях, которые я выполняю в группах пользователей. http://professionalaspnet.com/archive/2008/08/10/CodeStock-Rocked_2100_.aspx (ссылка для загрузки кода на странице).

Вот код, который я использую для возврата PDF-файла с помощью Handler, он может помочь вам.

'First run the supplied filename through a URL decoder to change any URL 
    'characters back to their normal selves. 
    sDocument = HttpUtility.UrlDecode(_ 
     Path.GetFileName(context.Request.Url.ToString)) 
    'Now build a full physical path to the file on the server. 
    sDocument = Path.Combine(Path.Combine(_ 
     context.Request.PhysicalApplicationPath, "PDF"), sDocument) 

    'Verify we actually have the file to serve. 
    If File.Exists(sDocument) = False Then 
     context.Server.Transfer("badpdf.aspx") 
    End If 

     'The next two sections are from Scott Hanselman's blog, but seem to be out of date, 
    'since it was posted in 2003 
    'http://www.hanselman.com/blog/InternetExplorerAndTheMagicOfMicrosoftKBArticleQ293792.aspx 
    'This is done to support older browsers that were not as efficient 
    'at managing document requests. 
    If InStr(1, context.Request.UserAgent, "contype") > 0 Then 
     'Just send the mime/type 
     Response.ContentType = "application/pdf" 
     Response.End() 
     Exit Sub 
    End If 

    Dim Language As String = context.Request.ServerVariables("HTTP_ACCEPT_LANGUAGE") 
    If String.IsNullOrEmpty(Language) Then 
     Response.Clear() 
     Response.ContentType = "application/pdf" 
     Response.AddHeader("Last-modified", "Mon, 01 Sep 1997 01:03:33 GMT") 
     Response.Status = "304 Not Modified" 
     Response.End() 
     Exit Sub 
    End If 

    'Set the Cacheability 
    Response.Cache.SetCacheability(HttpCacheability.Public) 
    Response.Cache.SetExpires(DateTime.MinValue) 
    Response.ContentType = "application/pdf" 

    'This opens the Open/Save Dialog 
    Response.AddHeader("Content-Disposition", "attachment; filename=" & _ 
    Path.GetFileName(sDocument)) 

    'This Bypasses the Open/Save Dialog 
    'Response.AddHeader("Content-Disposition", "inline; filename=" & _ 
    ' Path.GetFileName(sDocument)) 

    If File.Exists(sDocument) Then 
     'Write the file to the Response Output stream without buffering. 
     'This is new to ASP.NET 2.0. Prior to that use WriteFile. 
     Response.TransmitFile(sDocument) 
     Response.End() 
    End If 
0

Я думаю, что, наконец, выяснил, чего не хватает. Мне нужно было установить тип MIME для файлов PDF в application/octet-stream вместо application/pdf.

Смежные вопросы