2017-08-21 5 views
1

Ich bin auf der Suche nach einem Fortschrittsbalken zu einem Datei-Upload zu einem WebService hinzufügen.C# Winforms-Anwendung - Upload-Fortschrittsbalken

Ich habe gerade angefangen, an einer Winforms-Anwendung zu arbeiten, die meiner Meinung nach WCF verwendet, damit der Client ein Dokument in unser Unternehmens-Repository hochladen kann.

Ich benutze einen UploadService, wo ich es einen mehrteiligen Stream aus Metadaten und einer Datei übergeben. Ich habe mich schon darum gekümmert, diesen Teil zu bauen.

Ich bin nicht ganz sicher, wie zu gehen, wie man den Strom „etwas“ einzuhaken, damit ich es

hochgeladen werden verfolgen können

Ich habe einige Leute gesehen einen Hintergrund Arbeiter mit dem Fortschritt der ein verfolgen asynchroner Task, kann jedoch kein Beispiel dafür finden, dass jemand eine Datei, die auf einen WebService hochgeladen wird, nachverfolgen kann. Ich finde nur ein Beispiel dafür, wie jemand den in den Speicher eingebauten Stream verfolgt.

Jeder Rat/jede Hilfe wird geschätzt.

Vielen Dank!

  • (Ich bin ein intern, also wenn ich Dinge falsch erklärt, ich entschuldige mich würde ich gerne klarere Angaben zur Verfügung zu stellen, falls erforderlich.)

edit: Von dem, was ich kann Sagen Sie der Methode, den Stream hochzuladen, nehmen Sie nur einen Stream in, es gibt keine Option, um die Größe des Streams oder wie viele Bytes gleichzeitig zu lesen.

Antwort

0

Angenommen, Sie kennen die Größe der Datei (wenn es sich um eine lokale Datei handelt).

Sie greifen wahrscheinlich außerhalb der Festplatte als Stream zu und kopieren sie dann in den Upload-Stream.

Wenn Sie es in Stücke (zB einem Puffer) tun, dann können Sie den Fortschritt berechnen:

var totalNumberOfChunks = (fileSize/chunkSize); 
for(var chunk = 0; chunk < totalNumberOfChunks; chunk++) 
{ 
    // assuming you have the chunk byte array 
    // and have already sent it up to the server 

    var progress = ((double)chunk/totalNumberOfChunks) * 100; 
    // do something to surface this progress 
} 

Im Grunde wollen Sie nur um herauszufinden, wie viele einzelne Stücke von Daten, die Sie senden, und dann, wie Sie sie senden, berechnen Sie, wie weit Sie sind und den Fortschritt irgendwie auftauchen.

Natürlich gibt es manchmal Wege, dies für Sie zu tun haben: Getting the upload progress during file upload using Webclient.Uploadfile

+0

Danke für die Antwort! Ich kann ehrlich gesagt nicht herausfinden, wie sie die ChunkSize setzen. Ich sehe nirgends in der Codebasis, wo sie sogar auf Webclient verweisen. Uploadfile Es scheint mir, dass sie ihre eigene Upload-Methode innerhalb einer UploadService-Klasse geschrieben haben, die innerhalb des WebService ist. Diese Methode nimmt einfach einen Stream auf. Ist es möglich, dass sie die maximale Chunk-Größe in einer app.config festlegen? – cicero866

+0

Ohne den Code zu sehen, der den Upload durchführt, ist es sehr schwierig, tatsächlich zu antworten, wie man dies auf Ihr spezifisches Problem anwendet. – Clint

+0

Ich habe meine eigene benutzerdefinierte Stream-Klasse erstellt und eine Überschreibung der Read-Methode durchgeführt, um jedes Mal ein Ereignis auszulösen, wenn der Aufruf von read aufgerufen wird. Es gibt mir dann die aktuelle Position im Stream sowie die aktuelle Länge. Ich erhalte jetzt jedoch den folgenden Fehler: "Unerwarteter En des MIME-Multipart-Streams. MIME-Multipart-Nachricht ist nicht vollständig." – cicero866