我可以显示PDF,但不允许链接到它的网站?(Can I display a PDF, but not

2019-09-22 01:46发布

我有一个网站,包含了许多预先创建和坐在web服务器上的PDF文件。

我不想让用户只需键入URL,并获得PDF文件(即HTTP://MySite/MyPDFFolder/MyPDF.pdf )

我只想让我的时候加载它们,并显示他们他们观看。

我以前做过类似的事情。 我用PDFSharp在内存中创建一个PDF,然后将其加载到这样的页面:

protected void Page_Load(object sender, EventArgs e)
{
    try 
    {
        MemoryStream streamDoc = BarcodeReport.GetPDFReport(ID, false);
        // Set the ContentType to pdf, add a header for the length
        // and write the contents of the memorystream to the response
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-length", Convert.ToString(streamDoc.Length));
        Response.BinaryWrite(streamDoc.ToArray());
        //End the response
        Response.End();
        streamDoc.Close();
    }
    catch (NullReferenceException)
    {
        Communication.Logout();
    }


} 

我试图用这个代码从文件中读取,但无法弄清楚如何让一个MemoryStream读取文件。

我还需要一种方式说,“/ MyPDFFolder”路径是不可阅览。

感谢您的任何建议

Answer 1:

要加载从磁盘到缓冲区中的PDF文件

byte [] buffer;
using(FileStream fileStream = new FileStream(Filename, FileMode.Open))
{
    using (BinaryReader reader = new BinaryReader(fileStream))
    {
         buffer = reader.ReadBytes((int)reader.BaseStream.Length);
    }
}

然后,你可以创建你MemoryStream这样的:

using (MemoryStream msReader = new MemoryStream(buffer, false))
{
     // your code here.
}

但如果你已经有记忆了数据,你不需要MemoryStream 。 相反,这样做:

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


Answer 2:

所显示的用户屏幕上的任何东西都可以被捕获。 你可以通过使用基于浏览器的PDF浏览器保护您的源文件,但不能防止用户拍摄数据的快照。

至于保持源文件的安全......如果你只是把它们存储在一个目录下,是不是在你的web根...这应该做的伎俩。 或者你可以使用.htaccess文件来限制访问的目录。



Answer 3:

Keltex的代码适用于限制谁可以得到该文件。 如果用户没有被授权为一个特定的文件,给他们一个错误信息页面,否则使用该代码中继他们PDF。 该网址,然后将不能直接到PDF,而是一个脚本,这样会给你谁被允许访问超过100%的控制。

而不是把PDF文件中的问题在可访问的位置,并配置隐藏它们搞乱,你可以把他们在某个地方,是不是直接通过网络访问服务器。 既然你有代码把文件读入缓冲区,反正它转发给用户,不要紧的服务器上的文件的位置,只要它是你的代码访问。



文章来源: Can I display a PDF, but not allow linking to it in a website?
标签: c# asp.net web