如何从服务器加载pdf作为aspx页面(或安全地加载pdf文件)?

时间:2010-02-20 00:50:22

标签: c# .net asp.net pdf

我有一个带pdf的文件夹,但我不希望它们公开(比如只需输入www.domain.com/pdfs/doc.pdf)。

我需要他们有一些安全措施(如www.domain.com/loadpdf.asmx?key=23452ADFASD12345或使用POST)

我该怎么做?我已经找到了如何创建一个pdf,而不是如何从服务器加载一个。

感谢。

2 个答案:

答案 0 :(得分:2)

将PDF读入字节数组并使用它。正如awright18所说,在处理程序(.ashx)中执行此操作。像这样:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class MapHandler : IHttpHandler, IReadOnlySessionState
{

    public void ProcessRequest(HttpContext context) {
        CreateImage(context);
    }

    private void CreateImage(HttpContext context) {

        string documentFullname = // Get full name of the PDF you want to display...

        if (File.Exists(documentFullname)) {

            byte[] buffer;

            using (FileStream fileStream = new FileStream(documentFullname, FileMode.Open, FileAccess.Read, FileShare.Read))
            using (BinaryReader reader = new BinaryReader(fileStream)) {
                buffer = reader.ReadBytes((int)reader.BaseStream.Length);
            }

            context.Response.ContentType = "application/pdf";
            context.Response.AddHeader("Content-Length", buffer.Length.ToString());
            context.Response.BinaryWrite(buffer);
            context.Response.End();

        } else {
            context.Response.Write("Unable to find the document you requested.");
        }
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

我在这里发现this thread很有用,但上面的内容对你有用。

答案 1 :(得分:1)

您需要使用自定义http处理程序来处理这些请求。 Here是一篇涵盖您确切问题的文章。