2009-03-25 3 views
0

J'ai un site Web qui contient plusieurs fichiers PDF. Je dois en avoir un certain nombre verrouillé avec l'authentification ASP.NET standard (dans un dossier avec web.config qui refuse les utilisateurs anonymes).Gestion des autorisations PDF avec ASP.NET - Timeout Issue

Je mis des fichiers PDF pour obtenir traitées par le processus de travail ASP.NET et a ajouté:

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

à mon web.config, mais pour une raison quelconque, ils se bloquer lors du téléchargement. J'ai déjà vu ce problème sur un vieux serveur, et pour le live de moi, je ne me souviens pas de ce que j'ai fait pour le résoudre. Est-ce que quelqu'un a une idée?

Merci.

+0

Je ne fais pas ça (je fais du pdf en continu); Je suggérerais d'installer un violoniste et de voir ce qui descend du serveur et à quel rythme. Au moins, vous obtiendrez des informations avec lesquelles travailler. En outre, les fichiers PDF peuvent-ils être verrouillés? – Will

Répondre

0

Je voudrais ouvrir fiddler et voir quelles demandes ont été réellement envoyées au serveur et quelles sont les réponses. Cela peut aussi dépendre de la façon dont vous demandez réellement (c'est-à-dire le chemin) et de la façon dont vous fournissez le PDF. Je montre comment retourner des documents PDF protégés par mot de passe dans un de mes eBooks WROX et dans ma présentation de gestionnaires et de modules que je fais dans des groupes d'utilisateurs. http://professionalaspnet.com/archive/2008/08/10/CodeStock-Rocked_2100_.aspx (lien pour télécharger le code sur la page).

Voici le code que j'utilise pour renvoyer un fichier PDF à l'aide d'un gestionnaire, cela pourrait vous aider.

'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

Je pense que j'ai finalement compris ce qui me manquait. J'avais besoin de définir le type MIME pour les fichiers PDF à application/octet-stream au lieu d'application/pdf.