Я должен реализовать экспорт GEDCOM на моем сайте.Response.TransmitFile и удалить его после передачи
Мой .net-код создал один файл на сервере при нажатии на gedcom.
Затем мне нужно загрузить его клиенту с сервера, а также пользователю следует спросить, где сохранить этот файл, а это означает, что требуется сохранить saveogog.
После его загрузки я хочу удалить этот файл с сервера.
Я получил один код для передачи файла от сервера к клиенту:
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();
из этого LINK
, но я не могу удалить файл после этого кода как Response.End
заканчивается ответ поэтому любой код, написанный после этого строка не выполняется.
Если я делаю код для удаления файла до Response.End();
, тогда файл не передается, и я получаю сообщение об ошибке.
Что такое Response.Flush и что такое Response.End? пожалуйста, сообщите мне разницу? – Radhi
Response.Flush выдает любой буферный вывод (если он есть), но не бросает исключение ThreadAbortException - ответ все еще продолжается. Response.End flushes, но затем генерирует исключение ThreadAbortException, которое невозможно остановить. Ввод кода удаления в блок finally гарантирует, что он будет работать независимо от результата. – Josh
Это не относится к ситуации, когда пользователь нажимает кнопку Отмена в диалоговом окне загрузки файла. Когда это происходит, HttpException генерируется с сообщением «Удаленный хост закрыл соединение. Код ошибки - 0x800703E3». то в блоке finally сбой исключается с IOException - «Процесс не может получить доступ к файлу« C: \ Windows \ TEMP \ tmp5CA3.tmp », потому что он используется другим процессом». Я добавил catch (HttpException) и вызвал Response.End() внутри catch, и это сработало для меня – Colin