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();