Response.transmitfile и удалить его после передачи
-
30-09-2019 - |
Вопрос
Я должен реализовать экспорт GedCom на моем сайте.
Мой код .NET создал один файл на сервере при нажатии экспорта в GedCom.
Тогда мне нужно скачать его на клиента с сервера, а также пользователь должен просить, где сохранить этот файл, требуется SAVEDialog.
После того, как он загружен, я хочу удалить этот файл с сервера.
У меня есть один код для передачи файла с сервера к клиенту:
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
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();