Response.TransmitFile を作成し、送信後に削除します
-
30-09-2019 - |
質問
自分のサイトに GEDCOM エクスポートを実装する必要があります。
gedcom へのエクスポートをクリックすると、私の .net コードはサーバーに 1 つのファイルを作成しました。
次に、それをサーバーからクライアントにダウンロードする必要があり、またユーザーはそのファイルを保存する場所を尋ねられる必要があります。つまり、saveddialog が必要です。
ダウンロード後、そのファイルをサーバーから削除したいと考えています。
サーバーからクライアントにファイルを送信するコードが 1 つあります。
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();
これから リンク
しかし、このコードの後のファイルを削除することはできません Response.End
応答を終了するため、その行の後に書かれたコードは実行されません。
前にファイルを削除するコードを実行した場合 Response.End();
, 、その後、ファイルは送信されず、エラーが発生します。
解決
Response.End の後に配置したものは、その時点で ThreadAbortException をスローしてページの実行を停止するため、実行されません。
代わりにこれを試してください:
string responseFile = Server.MapPath("~/" + FileName);
try{
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(responseFile);
Response.Flush();
}
finally {
File.Delete(responseFile);
}
他のヒント
ファイルがかなり小さい場合は、ファイルをバイト配列にロードして、データを送信しながらファイルを削除できます。
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
string path = Server.MapPath("~/" + FileName);
byte[] data = File.ReadAllBytes(path);
File.Delete(path);
Response.BinaryWrite(data);
Response.End();
所属していません StackOverflow