2009-08-03 5 views
2

私は、あらかじめ作成され、Webサーバー上に座っている一連のPDFを持つWebサイトを持っています。私は、ユーザーが単にURLを入力してPDFファイルを取得できるようにしたくないPDFを表示できますが、WebサイトではPDFへのリンクが許可されていませんか?

(すなわちhttp://MySite/MyPDFFolder/MyPDF.pdf

私は、私はそれらをロードし、それらを表示するときにそれらを見ることができるようにしたい

私はこれまで同様のことをしています。私は、メモリ内のPDFを作成し、このようなページにそれをロードするためにPDFSharpを使用:

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"パスが参照できないと言う方法も必要です。

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

しかし、あなた場合:バッファにディスクからPDFファイルをロードするために任意の提案

答えて

5

ため

ありがとう:次に、あなたのMemoryStreamこのように

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

を作成することができますすでにメモリにデータがある場合は、MemoryStreamは必要ありません。代わりにこれを実行します。

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

サンプルコードありがとうございます。 – Vaccano

+0

直接アクセス(ユーザー、他のWebサイトリンク、または検索エンジンベース)を避けたい場合は、上記の方法を使用しますが、ハンドラ(ashx)でラップします。次に、要求のソースを検証し、それに応じてサーバーを要求することができます。 – jaredmroberts

1

ユーザーの画面に表示されるものはすべてキャプチャできます。ブラウザーベースのPDFビューアーを使用してソースファイルを保護することもできますが、ユーザーがデータのスナップショットを取ることを防ぐことはできません。

ソースファイルを安全に保つためには、あなたのウェブルートにないディレクトリにそれらを保存するだけです...そのトリックを行うべきです。または、.htaccessファイルを使用してディレクトリへのアクセスを制限することもできます。

+0

彼らがスクリーンショットを保存したり、それを見た後で何かを保存しても問題ありません。一部のユーザーは一部のpdfファイルを表示しないでください。それは私が防止しようとしているものです。 .htaccessファイルを見ていきます。 – Vaccano

0

Keltexのコードは、誰がファイルにアクセスできるかを制限するために機能します。ユーザーが特定のファイルに対して許可されていない場合は、エラーメッセージが表示されたページを表示し、そうでない場合はそのコードを使用してPDFを中継します。そのURLは、PDFに直接アクセスするのではなく、スクリプトにアクセスすることができます。そのため、アクセスが許可されているユーザーを100%制御できます。

PDFを問題のある場所に置いて隠すために設定を混乱させるのではなく、Webに直接アクセスできないサーバーのどこかに置くことができます。コードをバッファに読み込んでそれをユーザーに中継するコードがあるので、コードにアクセスできる限り、サーバー上のファイルがどこにあるかは関係ありません。

関連する問題