client
WebClient client = new WebClient();
byte[] file = client.DownloadData("http://domain.com/default.aspx");
File.WriteAllBytes("helloworld.txt", file);
Server
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();
}
}
Come si può vedere con l'esempio precedente, non solo non mi conosco la posizione fisica del file, ma non c'è una posizione fisica! È qualcosa che ho appena scritto in memoria e poi ho scritto i byte grezzi nella risposta, ma WebClient.DownloadData() sarà comunque in grado di scaricare i byte tutti uguali. Non importa da dove vengono i byte. Spero che questo ti aiuti.
Informazioni aggiuntive:
Qualche ulteriore documentazione informativa che illustra ulteriormente perché le opere di cui sopra.
Il compito principale di un browser è inviare richieste HTTP e gestire la risposta. Fortunatamente, gestiscono un sacco di lavoro per noi. La visualizzazione di una semplice pagina Web comporta l'invio di un HTTP-GET al server e la ricezione di byte nel corpo della risposta, la decodifica di quei byte nel testo e l'analisi di quel testo per il rendering di una pagina Web HTML. Sa gestire la risposta in questo modo perché ha un'intestazione Content-Type di Text/HTML. Mentre questo è ciò che fa la maggior parte del tempo, i browser possono anche gestire altri tipi MIME, se il Content-Type è text/plain decodificherà i byte e li visualizzerà semplicemente senza tentare di analizzarli. Il testo/XML di solito consente di comprimere ed espandere i nodi XML, ecc. Tutto dipende sempre da come il browser è programmato per gestire quel tipo MIME di particelle.
Quando si ottiene una finestra di dialogo Salva con nome in un browser, questo è semplicemente il modo in cui il browser gestisce una risposta con un'intestazione Content-Disposition: Attachment. Questa intestazione indica al browser di non provare a visualizzare o mostrare il contenuto, ma di scaricarlo come allegato.
Quando si utilizzano le classi WebClient/HttpWebRequest, si sta essenzialmente scrivendo il proprio browser in miniatura, tuttavia l'implementazione di come vengono gestiti i tipi MIME/le intestazioni HTTP dipende interamente da voi. E questo può consentire di salvare i byte da una risposta Content-Disposition (o qualsiasi altra risposta) senza richiedere una finestra di dialogo Apri o Salva.
Il file zip verrà scaricato automaticamente se si è in grado di zippare il file csv. – BumbleB2na
non ho il controllo sul formato –
forse questo aiuterà: http://blog.codecentric.de/en/2010/07/file-downloads-with-selenium-mission-impossible/ – BumbleB2na