È possibile scaricare un file da un sito Web in un modulo di applicazione Windows e inserirlo in una determinata directory?Come scaricare un file da un sito Web in C#
risposta
Con il WebClient class:
using System.Net;
//...
WebClient Client = new WebClient();
Client.DownloadFile("http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png", @"C:\folder\stackoverflowlogo.png");
Grazie, questo ha funzionato esattamente come volevo! – S3THST4
Come si scarica il file in una cartella relativa alla directory di installazione dell'applicazione? (dal momento che il percorso di download è hardcoded) – RPDeshaies
@ Tareck117 AppDomain.CurrentDomain.BaseDirectory + "myname" – Luntri
using (WebClient client = new WebClient())
{
client.DownloadFile("http://csharpindepth.com/Reviews.aspx",
@"c:\Users\Jon\Test\foo.txt");
}
SKEEEEEEEEEEEEEET! – FlySwat
Non dimenticare IDisposable ;-p Ma (a parte un "using") che è esattamente quello che sono entrato per scrivere ... –
Ah, il normale servizio da parte dei pedanti è ripreso ;-p –
Certo, basta usare un HttpWebRequest
.
volta che hai il HttpWebRequest
impostato, è possibile salvare il flusso di risposta a un file StreamWriter
(O BinaryWriter
, o un TextWriter
a seconda il tipo MIME.) E si dispone di un file sul disco rigido.
MODIFICA: Dimenticato in WebClient
. Funziona bene a meno che tu abbia solo bisogno di usare GET
per recuperare il tuo file. Se il sito richiede l'invio di informazioni su POST
, sarà necessario utilizzare uno HttpWebRequest
, pertanto la risposta non verrà visualizzata.
Non voglio leggerlo da un hd lento .. https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.getresponse(v=vs.110).aspx – Dan
Prova questo esempio:
public void TheDownload(string path)
{
System.IO.FileInfo toDownload = new System.IO.FileInfo(HttpContext.Current.Server.MapPath(path));
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition",
"attachment; filename=" + toDownload.Name);
HttpContext.Current.Response.AddHeader("Content-Length",
toDownload.Length.ToString());
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.WriteFile(patch);
HttpContext.Current.Response.End();
}
L'implementazione avviene nel seguente modo:
TheDownload("@"c:\Temporal\Test.txt"");
Fonte: http://www.systemdeveloper.info/2014/03/force-downloading-file-from-c.html
È inoltre possibile utilizzare il metodo DownloadFileAsync
nella classe WebClient
. Scarica in un file locale la risorsa con lo URI
specificato. Anche questo metodo non blocca il thread chiamante.
Esempio:
webClient.DownloadFileAsync(new Uri("http://www.example.com/file/test.jpg"), "test.jpg");
Per maggiori informazioni:
http://csharpexamples.com/download-files-synchronous-asynchronous-url-c/
È possibile utilizzare questo codice per scaricare il file da un sito web al desktop:
Potrebbe essere necessario conoscere lo stato durante il download del file o utilizzare le credenziali prima di effettuare la richiesta.
Ecco un esempio che copre queste opzioni:
Uri ur = new Uri("http://remotehost.do/images/img.jpg");
using (WebClient client = new WebClient()) {
//client.Credentials = new NetworkCredential("username", "password");
String credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes("Username" + ":" + "MyNewPassword"));
client.Headers[HttpRequestHeader.Authorization] = $"Basic {credentials}";
client.DownloadProgressChanged += WebClientDownloadProgressChanged;
client.DownloadDataCompleted += WebClientDownloadCompleted;
client.DownloadFileAsync(ur, @"C:\path\newImage.jpg");
}
e funzioni del callback implementato come segue:
void WebClientDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Console.WriteLine("Download status: {0}%.", e.ProgressPercentage);
// updating the UI
Dispatcher.Invoke(() => {
progressBar.Value = e.ProgressPercentage;
});
}
void WebClientDownloadCompleted(object sender, DownloadDataCompletedEventArgs e)
{
Console.WriteLine("Download finished!");
}
Lambda notazione: altra opzione possibile per la gestione degli eventi
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(delegate(object sender, DownloadProgressChangedEventArgs e) {
Console.WriteLine("Download status: {0}%.", e.ProgressPercentage);
// updating the UI
Dispatcher.Invoke(() => {
progressBar.Value = e.ProgressPercentage;
});
});
client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(delegate(object sender, DownloadDataCompletedEventArgs e){
Console.WriteLine("Download finished!");
});
Possiamo fare di meglio
client.DownloadProgressChanged += (object sender, DownloadProgressChangedEventArgs e) =>
{
Console.WriteLine("Download status: {0}%.", e.ProgressPercentage);
// updating the UI
Dispatcher.Invoke(() => {
progressBar.Value = e.ProgressPercentage;
});
};
client.DownloadDataCompleted += (object sender, DownloadDataCompletedEventArgs e) =>
{
Console.WriteLine("Download finished!");
};
O
client.DownloadProgressChanged += (o, e) =>
{
Console.WriteLine($"Download status: {e.ProgressPercentage}%.");
// updating the UI
Dispatcher.Invoke(() => {
progressBar.Value = e.ProgressPercentage;
});
};
client.DownloadDataCompleted += (o, e) =>
{
Console.WriteLine("Download finished!");
};
Se si desidera utilizzare l''attività asincrona' invece di 'vuoto asincrono', consultare [questa risposta] (http://stackoverflow.com/a/16514441/2816057) che utilizza' attendi webClient.DownloadFileTaskAsync (...) ' quindi non c'è bisogno di un evento 'DownloadDataCompleted' –
- 1. Come scaricare un sito Web completo?
- 2. Come scaricare un file zip da un sito (python)
- 3. Come posso riprodurre un file PLS da un sito Web?
- 4. Scaricare tutti i file di un tipo particolare da un sito Web utilizzando wget
- 5. Codifica di un sito Web in C?
- 6. Utilizzo di Scrapy per trovare e scaricare file PDF da un sito Web
- 7. Come utilizzare HttpWebRequest/Response per scaricare un file binario (.exe) da un server Web?
- 8. Come scaricare immagini da un sito con phantomjs
- 9. Come posso scaricare un file da EC2
- 10. Come scaricare un file con WinHTTP in C/C++?
- 11. Raschiare un intero sito Web
- 12. Salva tutti i file di immagine da un sito web
- 13. Come scaricare tutte le immagini da un sito Web usando wget?
- 14. C#: come convertire un progetto di sito Web in un progetto Web
- 15. Come incorporare l'audio in un sito Web?
- 16. Associare un URL da un sito Web a un altro controller Sito web con IIS7.5
- 17. Come rilevare se una pagina Web è in esecuzione da un sito Web o da un file system locale
- 18. Come scaricare memorystream in un file?
- 19. come scaricare un singolo file con multi-thread in C#
- 20. Come scaricare un file temporaneo
- 21. Come posso scaricare gli esempi da Twitter sito bootstrap
- 22. Convertire un sito Web in un'applicazione Android
- 23. È possibile che un sito Web dannoso rubi i miei cookie da un altro sito Web?
- 24. Come ottenere favicon.ico da un sito Web utilizzando Java?
- 25. Utilizzo di Java per scaricare file da un URL HTTPS
- 26. Come posso scaricare un file XML usando C#?
- 27. Come scaricare un file da owncloud con arricciatura, wget
- 28. come scaricare un file in java?
- 29. Scaricare un file con password e nome utente con C#
- 30. Come ospitare un sito Web JSP su un server web?
quello dei trasporti? FTP? HTTP? –
Il commento di Mitch è la risposta più diretta e più accurata, lol! – Cerebrus
Se non si è nuovi a .net, suggerirei di cercare la documentazione MSDN. Cerca le cose che vuoi raggiungere, guarda in quale spazio dei nomi potrebbe adattarsi e vedi se c'è una classe che può farlo :) – shahkalpesh