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
FTP: Upload unvollständig
bammes
myCSharp.de - Member



Dabei seit:
Beiträge: 9

Themenstarter:

FTP: Upload unvollständig

beantworten | zitieren | melden

Hi,

ich lade auf einem externen FTP-Server eine Datei hoch.
Das Resultat, welches am Server ankommt ist nicht komplett das selbe, was ich Losgeschickt habe.

FtpWebRequest client = (FtpWebRequest)WebRequest.Create("ftp://" + this.Host + "/" + this.Name);
client.Credentials = new NetworkCredential(this.username, this.password);
client.Method = WebRequestMethods.Ftp.UploadFile;

Stream uploadStream = client.GetRequestStream();
FileStream fileStream = new FileStream(this.path, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[1024];

while(fileStream.Position < fileStream.Length)
{
    this.State = Math.Round((double)fileStream.Position / (double)fileStream.Length * 100d, 2);
    int length = fileStream.Read(buffer, 0, buffer.Length);
    uploadStream.Write(buffer, 0, length);
}

Kann es sein, dass die Daten auf dem Weg verfälscht werden?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo bammes,
Zitat
Das Resultat, welches am Server ankommt ist nicht komplett das selbe, was ich Losgeschickt habe.
was genau ist unterschiedlich?
Zitat
ich lade auf einem externen FTP-Server eine Datei hoch.
Im deinem Code ist nicht zu erkennen, dass du die Streams schließt. Am besten du verwendest für beide Streams die using-Anweisung. Dann kann das gar nicht vergessen werden, selbst im Fehlerfall nicht.

herbivore
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

einfacher geht's mit WebClient.UploadFileAsync. Dann noch das UploadProgressChanged abonnieren für den Fortschritt.

Ich frage mich, was der FtpWebRequest an sich hat, das ihn so beliebt macht. WebClient ist fast immer die bessere Variante.

Gruß, MarsStein
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MarsStein am .
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
bammes
myCSharp.de - Member



Dabei seit:
Beiträge: 9

Themenstarter:

beantworten | zitieren | melden

Den Unterschied habe ich angehängt.
Das erste Bild ist mit dem ftpWebRequest das zweite mit den WebClient.
Beide sehen sogar gleich falsch aus.

Am Server kanns kaum liegen, da ich mit Filezilla sauber alle Daten laden kann.

Edit (neuer Code):

WebClient wc = new WebClient();
                    wc.Credentials = new NetworkCredential(this.username, this.password);
                    wc.UploadFileAsync(new Uri("ftp://" + this.Host + "/" + this.Name), this.path);

                    wc.UploadProgressChanged += (sender, e) =>
                    {
                        this.State = e.ProgressPercentage;
                    };

                    wc.UploadFileCompleted += (sender, e) =>
                    {...};

edit:

Die Bilder haben nach dem Upload immer die selben Fehler
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von bammes am .

Moderationshinweis von herbivore (08.09.2014 - 17:13:29):

Der Dateianhang wurde vom Benutzer entfernt. Er zeigte ein JPG Bild, das allem Anschein nach am Anfang korrekt dargestellt und nach ca. 1/3 wohl abgeschnitten war, was sich in entsprechenden bunten Artefakten darstellte.

private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

Hallo,

was passiert nachdem dieser Code durchgelaufen ist? Es ist keine Console die sich direkt danach beendet oder? Auch solltest Du dem Client zeit lassen seine Arbeit zu beenden bevor er von GC abgeräumt wird (Referenz halten).

Und vieleicht solltest Du deine Beispiel Bilder sorgfältiger aussuchen, da sie recht große ähnlichkeiten mit gewissen verbotenen Symbolen haben.
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 966

beantworten | zitieren | melden

Hallo bammes,

höre bitte auf herbivore und implementiere erst einmal IDisposable des Webclients.
private Nachricht | Beiträge des Benutzers
bammes
myCSharp.de - Member



Dabei seit:
Beiträge: 9

Themenstarter:

beantworten | zitieren | melden

Es handelt sich um eine WPF Anwendung.
Ich lasse dem WebClient genug Zeit, da ich erst weitermache, wenn UploadFileCompleted gestartet wurde.

ich benutze den WebClient später weiter für andere Anfragen (Http).

Wenn ich fertig bin leere ich den WebClient dann mit Dispose()
private Nachricht | Beiträge des Benutzers