Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Fehler bei Ftp upload.
Rainer Wein
myCSharp.de - Member



Dabei seit:
Beiträge: 90

Themenstarter:

Fehler bei Ftp upload.

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Smou
myCSharp.de - Member



Dabei seit:
Beiträge: 341
Herkunft: Fürstenfeldbruck

beantworten | zitieren | melden

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
Nur die Kenner können mit 10 Fingern bis 1023 zählen !!

private int Main()
{
   string programmingSkills = getMySkills("programming")
   return = 1;
}
private Nachricht | Beiträge des Benutzers
Rainer Wein
myCSharp.de - Member



Dabei seit:
Beiträge: 90

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
DarkShadow81
myCSharp.de - Member



Dabei seit:
Beiträge: 222
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Rainer Wein
myCSharp.de - Member



Dabei seit:
Beiträge: 90

Themenstarter:

beantworten | zitieren | melden

Danke schön, mit dieser Methode funktioniert es.
private Nachricht | Beiträge des Benutzers
ch1ll4
myCSharp.de - Member



Dabei seit:
Beiträge: 16

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
DarkShadow81
myCSharp.de - Member



Dabei seit:
Beiträge: 222
Herkunft: Berlin

beantworten | zitieren | melden

kommt eine fehlermeldung beim abbruch?
private Nachricht | Beiträge des Benutzers
ch1ll4
myCSharp.de - Member



Dabei seit:
Beiträge: 16

beantworten | zitieren | melden

//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...
Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von ch1ll4 am .
private Nachricht | Beiträge des Benutzers
DarkShadow81
myCSharp.de - Member



Dabei seit:
Beiträge: 222
Herkunft: Berlin

hm

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ch1ll4
myCSharp.de - Member



Dabei seit:
Beiträge: 16

beantworten | zitieren | melden

Zitat von DarkShadow81
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...
private Nachricht | Beiträge des Benutzers
DarkShadow81
myCSharp.de - Member



Dabei seit:
Beiträge: 222
Herkunft: Berlin

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
ch1ll4
myCSharp.de - Member



Dabei seit:
Beiträge: 16

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von tom-essen am .
Nobody is perfect. I'm sad, i'm not nobody
private Nachricht | Beiträge des Benutzers