0

現在、私は文書管理システムのプロジェクト テクノロジである ASP.Net MVC 3 を使用しています。ハード ドライブ (C:,D: E: ect) 内のフォルダにある PDF ドキュメントを表示したい。<embed>タグ付けしてみた。しかし、うまくいきませんでした。私のプロジェクト内のファイルで機能しました。また、そのpdfをダウンロードして読む必要はありません。私の見解のどこかに表示する必要があります。

このコード セグメントを見ました。しかし、私はこれを使用する方法がわかりません..

public FileResult GetFile(string fileName)
{
    Response.AppendHeader("Content-Disposition", "inline; filename=" + fileName + ";");
    string path = AppDomain.CurrentDomain.BaseDirectory + "App_Data/";            
    return File(path + fileName, System.Net.Mime.MediaTypeNames.Application.Pdf, fileName);
}

誰かがこの問題を解決するのを手伝ってくれますか? ありがとうございました

4

2 に答える 2

0

FileController クラスのメソッドを使用することができます。これにより、PDF がブラウザに返されます。

public ActionResult GetFile(string fileName)
{
  string fullPathToFile=SomeMethodToGetFullPathFromFileName(fileName);
  return File(fullPathToFile,"application/pdf","someFriendlyName.pdf")
}

仮定SomeMethodToGetFullPathFromFileNameは、PDFファイルへのフルパスを返すメソッドです

メソッドを使用Server.MapPathして、ファイルへの完全な (物理) パスを取得できます。

これをブラウザで表示したい場合は、次のようにアクセスできます

yoursitename/someControllername/getfile?fileName=somepdffilenamehere
于 2012-09-10T17:21:40.790 に答える
0

表示したコードは、フォルダーからファイルを提供するコントローラー アクションを表していApp_Codeます。ハード ドライブ上の任意の場所からファイルを提供すると、セキュリティ上の大きな脆弱性が生じます。したがって、このアプローチに固執することをお勧めします。しかし、このコードにはまだ欠陥があります。悪意のあるユーザーは、特別に細工された URL を使用して、ハード ドライブ上の任意のファイルを表示する可能性があります。これは、次のアクションで修正できます。

public ActionResult GetFile(string file)
{
    var appData = Server.MapPath("~/App_Data");
    var path = Path.Combine(appData, file);
    path = Path.GetFullPath(path);
    if (!path.StartsWith(appData))
    {
        // Ensure that we are serving file only inside the App_Data folder
        // and block requests outside like "../web.config"
        throw new HttpException(403, "Forbidden");
    }

    if (!System.IO.File.Exists(path))
    {
        return HttpNotFound();
    }

    return File(path, MediaTypeNames.Application.Pdf);
}

これで、タグを使用しembedてこのコントローラー アクションにリンクできるようになりました。

<object data="@Url.Action("GetFile", "SomeController", new { file = "test.pdf" })" type="application/pdf" width="300" height="200">
  alt : @Html.ActionLink("test.pdf", "SomeController", "Home", new { file = "test.pdf" })
</object>

または、必要にiframe応じて:

<iframe src="@Url.Action("GetFile", "SomeController", new { file = "foo.pdf" })" style="width:718px; height:700px;" frameborder="0"></iframe>
于 2012-09-10T17:26:19.747 に答える