Response.TransmitFile и удалите его после передачи

Я должен реализовать экспорт GEDCOM на моем сайте.

Мой код.net создал один файл на сервере при экспорте в gedcom.

Затем мне нужно загрузить его на клиент с сервера, а также у пользователя спросить, где сохранить этот файл, то есть требуется saveialog.

После загрузки я хочу удалить этот файл с сервера.

Я получил один код для передачи файла с сервера на клиент:

Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();

из этой ссылки

но я не могу удалить файл после этого кода как Response.End завершает ответ, поэтому любой код, написанный после этой строки, не выполняется.

Если я делаю код для удаления файла перед Response.End();, то файл не передается и я получаю ошибку.

2 ответа

Решение

Все, что вы поместите после 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();
Другие вопросы по тегам