3

ダウンロード用の応答にファイルを書き込もうとしています。私が使う:

      Response.Clear();
      Response.AddHeader("content-disposition", "attachment;filename=" + name);
      Response.ContentType = GetMimeType(path);
      Response.BinaryWrite(File.ReadAllBytes(path).ToArray());
      Response.End();

これは、複数のデスクトップブラウザで正常に機能します。ただし、WindowsPhone8デバイス上のInternetExplorerMobile 10では、失敗します。予想どおり、「タップして開く」というメッセージが表示された画面が表示されます。

ただし、メッセージをタップすると、URLが「Default[x].htm」の空白のページに移動します。「x」はこれまで1、2、3でした。このページをお気に入りに追加すると、Default [x] .htmlの完全なURLが「file:// C:\ Data \ Users \ DefApps \ AppData \ INTERNETEXPLORER \ INetCache \ WNW0K564 \Default[x]」であることがわかります。 htm」。

これは、ファイルの拡張子やMIMEタイプに関係なく同じです。なぜこれが起こっているのか私は困惑しています。IE Mobileと互換性のある応答にファイルを書き込む別の方法はありますか?

私が言ったように、これはファイル拡張子やMIMEタイプに関係なく失敗します。一例として、状況が次のとおりであることを確認しました。

filename: themes.ppt, MIME Type: application/vnd.ms-powerpoint

直接リンクするとすべてのファイルが正常にダウンロードされますが、セキュリティ上の理由からこれを行うことはできません。ファイルの一時的なコピーを作成してそれらのコピーにリンクしたくないのですが、応答にそれらを書き込む方法が見つからない場合は、そうする必要があります。

4

2 に答える 2

1

この問題の原因を突き止めました。クライアントにファイルを書き込んでいたページにアクセスするには、

Response.Redirect("downloadfile.aspx?" + ...);

何らかの理由で、これが Windows Phone デバイスで問題を引き起こしていました。ページ切り替えはクライアント側で行うように変更しました。これで問題は解決しました。おそらくJavaScriptを使用してこれを行うことができます:

location.href = "downloadfile.aspx?" + ...;

しかし、ダウンロードページ(downloadfile.aspx)に直接リンクするためのリンクを使用するだけになりました

于 2013-03-17T17:02:25.887 に答える
0

これにより、.NET4.5とWP8を組み合わせたIIS8の問題が解決されました。

デバッグモードでは機能しましたが、debug="false"では機能しませんでした。ページの実行には90秒かかりませんでしたが、ScriptTimeoutを手動で設定する必要がありました。

Server.ScriptTimeout = 120;

またはweb.config:

<configuration>
    <system.web>
        <compilation debug="false" targetFramework="4.5" />
    </system.web>
</configuration>

非デバッグモードのデフォルト値は90秒です。

于 2013-03-17T06:37:18.460 に答える