2

asp.netからIEでdocxファイルを開きたい。IISには、mimeタイプが正しくマップされています。PDFを正常に開くことはできますが、docxは常にcontent-disposition='attachment'のようにダウンロードするように求めます。行うべき設定はありますか?

            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.Cookies.Clear();
            Response.Cache.SetCacheability(HttpCacheability.Private);
            Response.CacheControl = "private";
            Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
            Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
            Response.AppendHeader("Content-Length", buffer.Length.ToString());
            Response.AppendHeader("Pragma", "cache");
            Response.AppendHeader("Expires", "60");
            Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
            Response.AppendHeader("Content-Disposition",
            "inline; " +
            "filename=\"" + "test.docx" + "\"; " +
            "size=" + buffer.Length.ToString() + "; " +
            "creation-date=" + DateTime.Now.ToString("R") + "; " +
            "modification-date=" + DateTime.Now.ToString("R") + "; " +
            "read-date=" + DateTime.Now.ToString("R"));
            Response.BinaryWrite(buffer);
            Response.Flush();
            HttpContext.Current.ApplicationInstance.CompleteRequest(); 
            Response.End();
4

3 に答える 3

1

テスト対象のコンピューターにMicrosoft Word またはWord Viewerがインストールされていますか?

処理するアプリケーションが存在しない場合、ブラウザはファイルをダウンロードするしかありません。

Word がインストールされている場合は、Windows ファイルの種類で .docx が Word にマップされているか、別のアプリにマップされているか、または何もマップされていないかを確認することもできます。このMSKB 記事の手順を使用して確認してください

于 2010-10-09T22:29:11.977 に答える
0

この問題は、SSL を使用する古いバージョンの IE (IE-8 より前) に存在します。IIS 7.5 以降でのサーバー側の修正は、URL 書き換え拡張機能を使用して、アウトバウンド ルールを追加し、Cache-Control ヘッダーの "no-store" 値を取り除き、Pragma ヘッダーを取り除くことです。このルールセットはトリックを行います:

<outboundRules>
    <rule name="Always Remove Pragma Header">
        <match serverVariable="RESPONSE_Pragma" pattern="(.*)" />
        <action type="Rewrite" value="" />
    </rule>
    <rule name="Remove No-Store for Attachments">
        <conditions>
            <add input="{RESPONSE_Content-Disposition}" pattern="attachment" />
        </conditions>
        <match serverVariable="RESPONSE_Cache-Control" pattern="no-store" />
        <action type="Rewrite" value="max-age=0" />
    </rule>
</outboundRules>
于 2014-02-12T17:38:09.723 に答える
0

私は通常、ユーザーにファイルを強制するために次の形式に従います。すべてのブラウザーで最良の結果が得られます (C# の代わりに VB を許してください)。

Response.Clear()
Response.ClearHeaders()
Response.Buffer = True
Response.ContentType = "your mime type"
Response.CacheControl = "public"
Response.AddHeader("Pragma", "public")
Response.AddHeader("Expires", "0")
Response.AddHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0")
Response.AddHeader("Content-Description", "Description of your content")
Response.AddHeader("Content-Disposition", "attachment; filename=""somefile.pdf""")

Response.BinaryWrite(buffer)

Response.Flush()
Response.End()

空欄を埋めるだけです。少しやりすぎかもしれないと思います。

アップデート:

おそらくすでにこれらのサイトを見たことがあると思いますが、他の人が偶然見つけられるようにここにそれらを置いておきます。

IE からの Docx のダウンロード - IIS での MIME タイプの設定 http://blogs.msdn.com/b/vsofficedeveloper/archive/2008/05/08/office-2007-open-xml-mime-types.aspx

あなたの方法がどこで失敗しているのか正確にはわかりません。もっと時間があれば、自分で試してみます。たぶん今夜遅く。今のところ頑張ってください!

于 2010-07-02T02:53:49.083 に答える