Response.TransmitFile y eliminarlo después de la transmisión
-
30-09-2019 - |
Pregunta
Tengo que aplicar GEDCOM de exportación en mi sitio.
Mi código .NET crea un archivo en el servidor cuando la exportación a GEDCOM se ha hecho clic.
Entonces necesito para descargarlo desde el servidor al cliente, así como el usuario debe pedir dónde guardar ese archivo, es decir, se requiere SaveDialog.
Después de que se haya descargado, quiero borrar ese archivo desde el servidor.
Tengo un código de transmisión de archivos del servidor al cliente:
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();
pero no soy capaz de eliminar el archivo después de este código como extremos Response.End
de respuesta por lo que cualquier código escrito después de que la línea no se ejecuta.
Si lo hago código para borrar archivo antes Response.End();
, a continuación, el archivo no se transmite y me da un error.
Solución
Cualquier cosa se pone después Response.End no se ejecutan porque arroja una ThreadAbortException a la ejecución de parada de la página en ese punto.
Pruebe esto en su lugar:
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);
}
Otros consejos
Si el archivo es razonablemente pequeño, puede cargarlo en una matriz de bytes para que pueda eliminar el archivo al mismo tiempo ser capaz de enviar los datos:
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();