6

ダウンロードのためにファイルをブラウザに送信しようとしていますが、1 時間以上いじった後では正しく動作しないようです。

次のコードを使用しています

    string filePath = Server.MapPath("/exports/test.txt");
    string downloadedFileName = "test.txt";

    Response.ContentType = "text/plain";
    Response.AppendHeader("content-disposition", "attachment; filename=" + downloadedFileName);
    Response.TransmitFile(filePath);
    Response.End();

ブラウザにダウンロードされますが、ファイルの内容ではなく、ページからの HTML でファイルが埋められます。server.MapPath のディレクトリを書き出すと、ファイルはそのディレクトリにあります。

最終的には、これを使用して accdb または mdb データベースをブラウザーに送信します。概念実証の例をオンラインで簡単に見つけることができるので、txt を使用しています。何かあれば、ContentType の外で何を変更する必要がありますか。また、ContentType はデータベース用である必要がありますか?

事前に助けてくれてありがとう!

4

3 に答える 3

3

これは通常、私にとってどのように機能するかです:

Response.Clear();

if (Request.Browser != null && Request.Browser.Browser == "IE")
    sFileName = HttpUtility.UrlPathEncode(sFileName);

// Response.Cache.SetCacheability(HttpCacheability.Public); // that's upon you

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + sFileName + "\"");
                                                            // ^                   ^
// Response.AddHeader("Content-Length", new FileInfo(sFilePath).Length.ToString()); // upon you 
Response.WriteFile(sFilePath);

Response.Flush();
Response.End();
于 2013-11-04T23:11:30.330 に答える
3

おそらく、送信の準備ができている応答ストリームにキューに入れられた出力が既にあるためです。ファイルを送信する前に、まずそれをクリアする必要があります。ASP.NET Web フォームを使用している場合、ポストバック動作が機能しなくなるため、ページが壊れます。

関連する SO の質問と回答を参照してください。

于 2013-11-04T23:08:37.277 に答える
0

.ashx 汎用ハンドラーを使用して、ASP.NET スタックの大部分をバイパスしてブラウザーにファイルを送信してみてください。

于 2013-11-04T23:10:56.330 に答える