1

PEMファイルを自分のWebサイトユーザーにダウンロード用にプッシュしています。コードは次のとおりです。

try
{
    FileStream sourceFile = null;

    Response.ContentType = "application/text";
    Response.AddHeader("content-disposition", "attachment; filename=" + Path.GetFileName(RequestFilePath));
    sourceFile = new FileStream(RequestFilePath, FileMode.Open);
    long FileSize = sourceFile.Length;
    byte[] getContent = new byte[(int)FileSize];
    sourceFile.Read(getContent, 0, (int)sourceFile.Length);
    sourceFile.Close();
    Response.BinaryWrite(getContent);
}
catch (Exception exp)
{
    throw new Exception("File save error! Message:<br />" + exp.Message, exp);
}

問題は、ダウンロードされるファイルに、そこにあるはずのコンテンツとWebページ全体のHTMLのコピーも含まれていることです。

ここで何が起こっているのですか?

4

3 に答える 3

5

以下を配置...

Response.Clear();

前...

Response.ContentType = "application/text";

アップデート

@Amiramが彼のコメントで言っているように(とにかく自分自身を追加しようとしていました)...

後...

Response.BinaryWrite(getContent);

追加...

Response.End();
于 2012-07-11T13:53:44.070 に答える
3

次の行を追加します。

Response.ClearContent();
Response.ContentType = "application/text";
...
于 2012-07-11T13:54:41.080 に答える
0

@Amiram Korach の解決策に同意します。それは前に
追加ですResponse.ClearContent();Response.ContentType...

でも、あなたのコメント通り

それでもページ全体が書き込まれます

@Amiram Korachは最後に追加するように返信しましResponse.End()た。
しかし、それはスローしSystem.Threading.ThreadAbortExceptionます。

catchしたがって、キャッチに追加を追加しSystem.Threading.ThreadAbortException、エラーメッセージを入力しないことをお勧めします。Response.Writeそうしないと、テキストファイルにも追加されます。

try
{
    FileStream sourceFile = null;
    Response.ClearContent(); // <<<---- Add this before `ContentType`.
    Response.ContentType = "application/text";
    .
    .
    Response.BinaryWrite(getContent);
    Response.End(); // <<<---- Add this at the end.
}
catch (System.Threading.ThreadAbortException) //<<-- Add this catch.
{
    //Don't add anything here.
    //because if you write here in Response.Write,
    //that text also will be added to your text file.
}
catch (Exception exp)
{
    throw new Exception("File save error! Message:<br />" + exp.Message, exp);
}

これで問題は解決します。

于 2012-11-28T06:17:01.137 に答える