2013-02-05 9 views
11

ブラウザに直接PD​​Fファイルを表示したいと思います。私はこの質問が既に尋ねられていることは知っていますが、私にとってはうまくいく解決策は見当たりません。ここで私のブラウザに直接PD​​Fファイルを開く

は、これまでの自分の行動のコントローラのコードである:ここで

public ActionResult GetPdf(string fileName) 
{ 
    string filePath = "~/Content/files/" + fileName; 
    return File(filePath, "application/pdf", fileName); 
} 

が私の見解です:

@{ 
    doc = "Mode_d'emploi.pdf"; 
} 

<p>@Html.ActionLink(UserResource.DocumentationLink, "GetPdf", "General", new { fileName = doc }, null)</p> 

Iマウスは、ここにリンクを置くと、リンクがされています

enter image description here

私のコードの問題は、pdfファイルがブラウザを開いてファイルを保存するかどうかを尋ねるメッセージが表示されます。

enter image description here

私はすでに私のブラウザで直接PDFファイルを閲覧することができ、他のウェブサイトでそれをテストするので、それはそれ私のブラウザのサポート可能であると知っています。

enter image description here

あなたが生成されたリンクに差がある見ることができるように:

は例えば、ここで私はマウス(別のウェブサイト上の)リンクを置くのリンクです。これが有用かどうかわかりません。

どのようにすれば私のpdfをブラウザで直接見ることができますか?

ありがとうございました。

+0

既に回答済みです:http://stackoverflow.com/questions/3206682/stream-file-using-asp-net-mvc-filecontentresult-in-a-browser-with-a-name –

+0

ありがとうございましたanderson.pimentel 、それは私を助けた。 – Bronzato

答えて

14

代わりFileを返すので戻してくださいFileStreamResult

public ActionResult GetPdf(string fileName) 
{ 
    var fileStream = new FileStream("~/Content/files/" + fileName, 
            FileMode.Open, 
            FileAccess.Read 
            ); 
    var fsResult = new FileStreamResult(fileStream, "application/pdf"); 
    return fsResult; 
} 
+0

この回答は間違っています。私の答えを見てください。 – ataravati

1

あなたは、データベースの画像列に格納されたファイルを読み込む場合は、次のように使用することができます:

public ActionResult DownloadFile(int id) 
{ 
    using (var db = new DbContext()) 
    { 
     var data = 
      db.Documents.FirstOrDefault(m => m.ID == id); 
     if (data == null) return HttpNotFound(); 
     Response.AppendHeader("content-disposition", "inline; filename=filename.pdf"); 
     return new FileStreamResult(new MemoryStream(data.Fisier.ToArray()), "application/pdf"); 
    } 
} 
8

はこれにあなたのコードを変更:

 Response.AppendHeader("Content-Disposition","inline;filename=xxxx.pdf"); 
     return File(filePath, "application/pdf"); 
14

回答が間違っています。ファイルを開くか保存するかを尋ねるメッセージが表示されるのは、ファイル名を指定しているためです。ファイル名を指定しないと、ブラウザにPDFファイルが開きます。

だから、あなたがする必要があるすべてはこれにあなたの行動を変更することです:

public ActionResult GetPdf(string fileName) 
{ 
    string filePath = "~/Content/files/" + fileName; 
    return File(filePath, "application/pdf"); 
} 

または、ファイル名を指定する必要がある場合、あなたはこのようにそれを行う必要があるでしょう:

public ActionResult GetPdf(string fileName) 
{ 
    string filePath = "~/Content/files/" + fileName; 
    Response.AddHeader("Content-Disposition", "inline; filename=" + fileName);   

    return File(filePath, "application/pdf"); 
} 
+2

私のためにうまく動作します、ataravatiに感謝します。 – Neo1779

0

Rotativaパッケージを使用してPDFを生成する場合は、FileNameという名前のファイルに以下の例のように名前を付けないでください。

return new PartialViewAsPdf("_JcPdfGenerator", pdfModel); 

これは誰かに役立つことを望みます。

関連する問題