Upload-und download binäre Datei auf/vom FTP-server in C#/.NET
Ich bin mit .NET 4 C#. Ich bin versucht zu laden und dann laden Sie eine ZIP-Datei zu (meinem) server.
Für das hochladen ich habe
using (WebClient client = new WebClient())
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(MyUrl);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.EnableSsl = false;
request.Credentials = new NetworkCredential(MyLogin, MyPassword);
byte[] fileContents = null;
using (StreamReader sourceStream = new StreamReader(LocalFilePath))
{
fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
}
request.ContentLength = fileContents.Length;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(fileContents, 0, fileContents.Length);
}
FtpWebResponse response = null;
response = (FtpWebResponse)request.GetResponse();
response.Close();
}
Diese scheint zu funktionieren, dass ich eine Datei auf dem server, der die richtige Größe.
1) Wie kann ich streamen, anstatt in den Arbeitsspeicher zu laden zuerst? Ich werde das hochladen sehr großer Dateien.
Und für den Download habe ich
using (WebClient client = new WebClient())
{
string HtmlResult = String.Empty;
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(remoteFile);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.EnableSsl = false;
request.Credentials = new NetworkCredential(MyLogin, MyPassword);
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
using (Stream responseStream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(responseStream))
using (FileStream writer = new FileStream(localFilename, FileMode.Create))
{
long length = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[2048];
readCount = responseStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
writer.Write(buffer, 0, readCount);
readCount = responseStream.Read(buffer, 0, bufferSize);
}
}
}
2) Alles scheint zu funktionieren ... außer wenn ich versuche zu entpacken Sie die heruntergeladene ZIP-Datei erhalte ich eine ungültige ZIP-Datei.
- FTP
BINARY
- Modus? - Richtig! Danke, ich werde versuchen, dass. Denke auch, dass ich aussortiert stream-uploads.
- Binary-Modus ist Standard.
- Wenn Sie das herunterladen einer ZIP-Datei vorher laden mit Ihrem code, die Datei war beschädigt, während der upload, wie Sie behandeln die Datei als UTF-8 text-Datei, nicht als eine binäre Datei.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hochladen
Der einfachste Weg zum hochladen eines binären Datei auf einen FTP-server verwenden .NET framework wird mit
WebClient.UploadFile
:Wenn Sie brauchen eine stärkere Kontrolle, dass
WebClient
nicht bieten (wie TLS/SSL-Verschlüsselung, etc.), verwenden SieFtpWebRequest
. Einfach nur kopierenFileStream
FTP-stream mitStream.CopyTo
:Wenn Sie brauchen, um zu überwachen, eine upload-Fortschritt, Sie zu kopieren Sie den Inhalt von Blöcken selbst:
Zur GUI-progress (WinForms
ProgressBar
), siehe:Wie können wir zeigen Fortschrittsbalken für den upload mit FtpWebRequest
Wenn Sie möchten, laden Sie alle Dateien aus einem Ordner finden Sie unter
Verzeichnis hochladen von Dateien per WebClient.
Download
Der einfachste Weg zum download einer binären Datei von einem FTP-server verwenden .NET framework wird mit
WebClient.DownloadFile
:Wenn Sie brauchen eine stärkere Kontrolle, dass
WebClient
nicht bieten (wie TLS/SSL-Verschlüsselung, etc.), verwenden SieFtpWebRequest
. Einfach nur kopieren einen FTP-Antwort-stream aufFileStream
mitStream.CopyTo
:Wenn Sie brauchen, um zu überwachen, download-Fortschritt, Sie zu kopieren Sie den Inhalt von Blöcken selbst:
Zur GUI-progress (WinForms
ProgressBar
), siehe:FtpWebRequest FTP-download mit ProgressBar
Wenn Sie möchten, laden Sie alle Dateien von einem remote-Ordner, siehe
C# - Download aller Dateien und Unterverzeichnisse per FTP.