cliente
WebClient client = new WebClient();
byte[] file = client.DownloadData("http://domain.com/default.aspx");
File.WriteAllBytes("helloworld.txt", file);
servidor
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (MemoryStream memory = new MemoryStream())
using (StreamWriter writer = new StreamWriter(memory))
{
// The bytes written can be anything, does not have to be text
writer.WriteLine("hello, world");
writer.Flush();
Response.BinaryWrite(memory.ToArray());
}
Response.AddHeader("Content-Disposition", "Attachment; filename=helloworld.txt");
Response.AddHeader("Content-Type", "application/octet-stream");
Response.End();
}
}
Como se puede ver con el ejemplo anterior, no sólo yo no sé la ubicación física del archivo, pero no hay una ubicación física! Es algo que acabo de escribir en la memoria y luego escribí los bytes en bruto en la respuesta, pero WebClient.DownloadData() aún podrá descargar los bytes de todos modos. No importa de dónde vienen los bytes. Espero que esto ayude.
Información adicional:
Parte de la información antecedente adicional que explica además por qué las obras anteriores.
El trabajo principal de un navegador es enviar solicitudes HTTP y gestionar la respuesta. Afortunadamente, manejan mucho del trabajo pesado para nosotros. Mostrar una página web simple implica enviar un HTTP-GET al servidor y recibir bytes en el cuerpo de la respuesta, decodificar esos bytes en texto y analizar ese texto para representar una página web HTML. Sabe manejar la respuesta de esa manera porque tiene un encabezado Content-Type de Texto/HTML. Si bien esto es lo que hace la mayor parte del tiempo, los navegadores también pueden manejar otros tipos MIME, si Content-Type es text/plain decodificará los bytes y simplemente los mostrará sin intentar analizarlos. El texto/XML generalmente le permitirá colapsar y expandir nodos XML, etc. De nuevo, todo depende de cómo esté programado el navegador para manejar ese tipo de partícula MIME.
Cuando obtiene un cuadro de diálogo Guardar como en un navegador, esa es simplemente la manera en que el navegador maneja una respuesta con un encabezado de disposición de contenido: archivo adjunto. Este encabezado le dice al navegador que no intente renderizar o mostrar el contenido, sino que lo descargue como un archivo adjunto.
Cuando utiliza las clases WebClient/HttpWebRequest, básicamente está escribiendo su propio navegador en miniatura, sin embargo, la implementación de cómo se manejan los tipos MIME/encabezados HTTP depende exclusivamente de usted. Y esto puede permitirle guardar los bytes de una respuesta de disposición de contenido (o cualquier respuesta para ese asunto) sin preguntar con un cuadro de diálogo Abrir o Guardar.
archivo zip se descargará automáticamente si está de acuerdo con comprimir el archivo csv. – BumbleB2na
no tengo control sobre el formato –
tal vez esto ayude: http://blog.codecentric.de/en/2010/07/file-downloads-with-selenium-mission-impossible/ – BumbleB2na