Ich würde gern mehrere Datei per Ftp übertragen.
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://test.de/" + test);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("test", "test");
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;
for (int i = 0; i < upload_BMP_ARY.Length; i++)
{
upload_BMP_ARY[0].Save(Application.StartupPath + "\\" + test);
FileStream stream = File.OpenRead(Application.StartupPath + "\\" + test);
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
stream.Close();
//Upload file
Stream reqStream = request.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Close();
}
Die Übertragung beginnt auch, aber bricht mitten im Upload ab.
(" Die zugrunde liegende Verbindung wurde geschlossen: Unbekannter Fehler beim Empfangen. ")
Wenn ich die Datei per FlashFXP übertrage funktioniert es.
Die zweite Frage ist, wie man mehrere Datein hintereinander uploaden kann.
So funktioniert es nicht.
Servus,
hast du es schon mal im debug mode ausgeführt ?... bekommst sicher mehr fehler infos als nur unbekannter fehler.
als nächstes geb ich dir den tipp such mal im forum nach ftp biliotheken... du wirst fündig und da gibt es schon fertig implentierte funktionen zum üp und download... etc.
die musst du dann nur für jede datei ausführen.
(möglicher weise gibt es noch elegantere lösungen aber das wäre wohl die einfachste)
grüße
private int Main()
{
string programmingSkills = getMySkills("programming")
return = 1;
}
Nein auch im Debug Modus bekomme ich keine weiteren Hinweise.
Ich möchte auch keine fertige Ftp Bibilothek nur für den Upload von ein paar Dateien
nehmen.
Eigenartig bei der Sache ist das wenn ich das Debugging nicht Beende der Upload trotz der Fehlermeldung fortgesetzt wird.
Es würde mich auch sehr interessieren welche elegante Lösung es für den Upload
von mehrern Dateien gibt.
mit diesem Code funktioniert ist.
ich vermute mal es liegt daran das du dein Ftpwebrequest ausserhalb der schleife hast. verlager ihn mal in die schleife rein. dann sollte es gehen. Zudem wäre es ratsam, alle relevanten exceptions zu behandeln um fehlerfrei übertragen zu können bzw fehler überhaupt zu erkennen. grade bei streams und netzwerkverkehr gibts zuviele faktoren die dazwischen funken können.
List<string> Dateien = new List<string>();
Dateien.Add("C:\\PDA.jpg"); Dateien.Add("C:\\Roboter.jpg");
for (int i = 0; i < Dateien.Count; i++) {
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://127.0.0.1/"+Path.GetFileName(Dateien[i]));
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("test", "test");
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;
Console.Write("Upload Datei '"+Dateien[i]+"'...");
FileStream stream = null;
try { stream = File.OpenRead(Dateien[i]); }
catch (Exception d) { Console.WriteLine(d.Message); }
if (stream!=null) {
byte[] buffer = new byte[stream.Length];
try {
stream.Read(buffer, 0, buffer.Length);
//Upload file
Stream reqStream = null;
try { reqStream = request.GetRequestStream(); }
catch (Exception e) { Console.WriteLine(e.Message); }
if (reqStream!=null) {
try { reqStream.Write(buffer, 0, buffer.Length); }
catch (Exception f) { Console.WriteLine(f.Message); }
reqStream.Close();
} else { Console.WriteLine(" NULL"); }
Console.WriteLine(" OK");
} catch (Exception d2) { Console.WriteLine(d2.Message); }
}
}
Ergebnis:
Upload Datei 'C:\PDA.jpg'... OK
Upload Datei 'C:\Roboter.jpg'... OK
Hallo,
ich habe den Code aus dem Beispiel aus dem vorletzten Eintrag nommen, da mein Code nicht so wie erwartet lief.
Allerdings überträgt mir auch diese Variante nicht meine Datei komplett. Zum Test nehme ich eine 340MB Datei welche nur bis zu maximal 280M erreicht bei der Übertragung. Danach bricht der Transfert ab
Desweiteren suche ich eine funktionierende Akternative mit einem asyncronen FTP Transfer.
MFG ch1ll4
//leider nicht.
Habe gerade doch eine Fehlermeldung bekommen:
Die zugrunde liegende Verbindung wurde geschlossen. Unbekannter Fehler beim Empfangen.
Allerdings sende ich doch (Upload)???
hatte es auch schon anders probiert:
private void btUpload_Click(object sender, EventArgs e)
{
WebClient uploadclient = new WebClient();
Uri myconn = null;
if (tbUploadServer.Text.Contains("ftp://"))
myconn = new Uri(tbUploadServer.Text + "/" + cbUploadPfad.Text + "/" + lbName.Text);
else
myconn = new Uri("ftp://" + tbUploadServer.Text + "/" + cbUploadPfad.Text + "/" + lbName.Text);
try
{
uploadclient.Credentials = new NetworkCredential(tbUploadbenutzer.Text, tbUploadPasswort.Text);
this.uploadclient.UploadProgressChanged +=new UploadProgressChangedEventHandler(uploadclient_UploadProgressChanged);
this.uploadclient.UploadFileCompleted += new UploadFileCompletedEventHandler(uploadclient_UploadFileCompleted);
this.uploadclient.UploadFileAsync(myconn, pfadname);
}
catch (Exception ex)
{
Messagebox.Show(ex.Message);
}
}
void uploadclient_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e)
{
if (e.Error == null)
MessageBox.Show("Upload erfolgreich durchgeführt.");
else
MessageBox.Show(e.Error.Message);
}
So brach der Dateitransfer aber leider auch ab....
Ich habe so wie hier gerade auch den Download gestaltet. das funzt ohne Probleme. Auch mehreren GB großen Dateien...
Nur der Upload macht mir also Probleme...
nur sone idee aber schonma mit nem anderen ftpprogramm getestet ob du die datei hochladen kannst? nich das es eine serverseitige beschränkung im upload ist
nur sone idee aber schonma mit nem anderen ftpprogramm getestet ob du die datei hochladen kannst? nich das es eine serverseitige beschränkung im upload ist
Ja. Geht ohne Probleme. Habs mehrmals getestet und nochmal den FTP Betreiber zb. eventueller Limitierungen gefragt...
um explizit herauszufinden was letztendlich den abbruch verursacht, bleibt dir eigentlich nur den TCP Stack zu beobachten, sprich mit einem paketfilter zu beobachten warum er abbricht. alles andere wären ratespielchen.
mittlerweile habe ich den fehler gefunden, aber noch nicht behoeben können...
Über UploadFileCompletedEventArgs e.Error kommt folgende Fehlermeldung:
" bei System.Net.FtpWebRequest.EndGetResponse(IAsyncResult asyncResult)\r\n bei System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)\r\n bei System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)"
Google konnte mir hierbei allerdings auch noch nicht weiterhelfen.
Es werden wenn man zb eine 300 MB Datei hochläd manchmal nur 70 MB hochgeladen, manchmal auch mehr. Bei kleineren Dateien taucht der Fehler nicht auf. Dann gibt es eine Schweigesekunde und dann wird das Error Event gestartet...
Hallo!
@ch1ll4:
Ist jetzt nur eine Vermutung: Evtl. handelt es sich um ein Timeout-Problem, d.h. der Upload dauert so lange, dass fälschlicherweise ein Verbindungsfehler angenommen und der Upload abgebrochen wird. Kannst ja mal testen, ob der Abbruch immer innerhalb eine gewissen Zeitspanne auftritt.
Evtl. hilft es, den Timeout zu erhöhen (FtpWebRequest.Timeout).
EDIT: Sehe gerade, dass du mit WebClient arbeitest, dort kann man den Timeout anscheinend nicht anpassen. Also evtl. mal mit FtpWebRequest versuchen.
Nobody is perfect. I'm sad, i'm not nobody 🙁