0

DocX ファイル用のカスタム httphandler を作成し、iframe を介してファイルを表示しようとしています。

これが私のコントローラーです:

    public ActionResult LoadDOC(string path)
    {
        var fsSource = new FileStream(path, FileMode.Open, FileAccess.Read);
        return new FileStreamResult(fsSource, "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
        {
            FileDownloadName = "newfile.docx"
        };
    }

}

httphandler が取得できるように、ファイル名を変更する必要があります。ファイルは、拡張子なしでファイル サーバーに存在します (名前が GUID に変更されます)。例えば:

"\\\\fileservername\\Documents\\811943a3-56f7-42cb-8450-1b8319a426b4\\633d9f3e-df99-408e-b59c-ec8efa4fa41f"

ファイルがサーバーに存在する方法を変更することはできません。コードを使用して拡張子を追加する必要があります。

上記を iframe で実行すると、すぐにファイルがダウンロードされます。ただし、PDF ファイルとテキスト ファイルは適切にレンダリングされます。

カスタム httphandler は次のとおりです。

      <add name="DOCXhandler" path="*.docx" verb="GET" type="MyProject.Handlers.DocxHandler, MyProject" preCondition="integratedMode" />

このアプローチを使用してファイル ストリーム拡張子を変更する方法、または iframe に表示されるファイルの望ましい結果を達成するための別のアプローチを行うにはどうすればよいですか?

コンテンツ タイプごとにハンドラーを変更することは可能ですか?

編集:明確にするための質問。

  • ファイル拡張子ではなく、コンテンツ タイプで http ハンドラを動作させることは可能ですか?
  • iframe に表示するときに、filestreamresult が .docx ファイルのカスタム httphandler を使用していることを確認するにはどうすればよいですか?
  • 私はこれを正しい方法で行っていますか、それとも何か不足していますか?
4

2 に答える 2