10

MVC アプリケーションがあります。ユーザーがページの開くボタンをクリックしたときに、pdf ファイルを開く必要があります。PDFが保存されているファイルパスはデータベースから読み取られ、c:上のファイルです。HTMLコードで開くにはどうすればよいですか? 私はこのコードを持っています:

<a href="@Model.CertificatePath" target="_blank" class="button3">Open</a>

しかし、これは私のファイルを開きません。どうすればいいですか?PDFであることをどこかに指定する必要がありますか??

4

5 に答える 5

12

ファイル名を受け取り、フルパスを解決してから、ディスク上のファイルをサーバーからクライアントにストリーミングするアクションへのパスを指定する必要があります。ありがたいことに、Webにいるクライアントは、サーバーのファイルシステムから直接ファイルを読み取ることはできません(リモートユーザーのマシン@Model.CertificatePath上のファイルへのパスを提案している場合を除きます)。

public ActionResult Download(string fileName)
{
   string path = Path.Combine(@"C:\path\to\files", fileName);

   return File(path, "application/pdf");

}

アップデート

@Model.CertificatePathがクライアントの実際のマシン上の場所である場合は、次を試してください。

 <a href="file://@Model.CertificatePath" target="_blank" class="button3">Open</a>

一部のブラウザには、ローカルファイルを開くことを許可しないセキュリティ設定がある場合があることに注意してください。

于 2012-06-19T12:34:37.060 に答える
6

あなたのビューでこのようにしてみてください

@Html.ActionLink("View", "ViewPDF", new { target = "_blank" })

これで、リンクが新しいウィンドウで開きます。ViewPDFコントローラーメソッドでpdfバイトを書き込むことができます

于 2013-04-16T10:18:53.677 に答える
1

以下のような方法でリンクを起動させると、ブラウザで pdf を開くのではなく、選択したファイルをファイル ダウンロードにストリーミングすることができます。

/// <summary>
/// Forces a file to be displayed to the user for download.
/// </summary>
/// <param name="virtualPath"></param>
/// <param name="fileName"></param>
public static void ForceDownload(string virtualPath, string fileName)
{
    HttpResponse response = HttpContext.Current.Response;
    response.Clear();
    response.AddHeader("content-disposition", "attachment; filename=" + fileName);
    response.WriteFile(virtualPath);
    response.ContentType = "";
    response.End();
}
于 2012-06-19T12:40:39.030 に答える
0

残念ながら、PDF を開く場所を指定することはできません。主な理由は、Adobe Acrobat リーダー プラグインがインストールされていることや、そのプラグインがどのように機能するかを保証できないためです。

理論的には新しいウィンドウを開くことができ、その新しいウィンドウには PDF ファイルを開くための JavaScript 関数がありますが、プラグインなしで埋め込まれたウィンドウで開くことを保証することはできません。ベストトライ」。

于 2012-06-19T12:35:36.497 に答える