2011-12-21 18 views
18

ブラウザ自体でファイルを開く代わりに、ブラウザがサーバーからPDF文書をダウンロードするようにします。私はC#を使用しています。ブラウザでPDF文書を開く代わりにPDF文書をダウンロードする

以下は私が使用したサンプルコードです。それはあなたが "content-disposition" ヘッダーをご覧ください。..

string filename = "Sample server url"; 
response.redirect(filename); 
+0

なぜですか?何が起こるのですか?実際のURLは何ですか? – SLaks

+0

@SLaks ..返信ありがとうございました。ブラウザの別のタブで開いています。ダウンロードしない。 – Arun

答えて

29

を働いていません。たとえば、 "Content-Disposition"を "attachment; filename = foo.pdf"に設定すると、ユーザーは(通常は)[名前を付けて保存:foo.pdf]ダイアログが開きます。ただし、のダウンロードを行う要求から来る必要があります。したがって、リダイレクト中にこれを行うことはできません。ただし、ASP.NETはこの目的でResponse.TransmitFileを提供します。あなたがあなたの代わりに、ブラウザ内の開口部のあなたの終わりにそれらを保存することができるようにファイルをレンダリングしたい場合は

Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf"); 
Response.TransmitFile(filePath); 
Response.End(); 
+0

お返事ありがとうございます...私はurの答えをfoo.pdfの代わりに与える場合、それは動作します...? – Arun

+0

@Neon no;これを行う場合は、実際にコンテンツを送信する必要があります。 'TransmitFile'は* local *ファイルパスIIRCをとります。 –

+0

@Neon明確にする - URLが別の場所にある場合、そのURLの*プロキシ*として動作する可能性があります。しかし、あなたは「行き、そこからファイルを取得し、それをダウンロードとして扱う」と言うことはできません。最終的なコンテンツを提供するサーバーは、コンテンツの種類と配置を選択します。 –

4

:たとえば(あなたが他の好ましい選択肢を持っているMVCを使用していないと仮定した場合)あなたは、クライアントアプリケーションを使用してファイルをダウンロードしたい場合は

しかし、その後、あなたはWebClient classを使用する必要があります:あなたは、次のコードスニペットをしようとします。

+0

返信ありがとう...私はあなたのコードを試し、私のフィードバックを伝えます.. – Arun

+0

Response.BinaryWrite(outStream.ToArray());行で実行中に "Argument Out of Range Exception"を取得しています。 – Arun

+0

あなたはoutStreamの内容を入力しましたか?あなたのファイルをメモリストリームに読み込んで、うまく動作することを願っています。 –

0

彼らはほとんどの場合にはほぼ同じですが、違いがある:

は同じキー

追加ヘッダではなく別のものを追加し、キーを置き換えることはありませんとヘッダーが前のエントリに置き換えられます追加1。

2

これを使用するには、inlineパラメータをtrueに設定すると、ブラウザにfalseが表示され、ブラウザにダイアログとして保存されます。

public void ExportReport(XtraReport report, string fileName, string fileType, bool inline) 
{ 
    MemoryStream stream = new MemoryStream(); 

    Response.Clear(); 

    if (fileType == "xls") 
     report.ExportToXls(stream); 
    if (fileType == "pdf") 
     report.ExportToPdf(stream); 
    if (fileType == "rtf") 
     report.ExportToRtf(stream); 
    if (fileType == "csv") 
     report.ExportToCsv(stream); 

    Response.ContentType = "application/" + fileType; 
    Response.AddHeader("Accept-Header", stream.Length.ToString()); 
    Response.AddHeader("Content-Disposition", String.Format("{0}; filename={1}.{2}", (inline ? "Inline" : "Attachment"), fileName, fileType)); 
    Response.AddHeader("Content-Length", stream.Length.ToString()); 
    //Response.ContentEncoding = System.Text.Encoding.Default; 
    Response.BinaryWrite(stream.ToArray()); 

    Response.End(); 
} 
関連する問題