2016-03-08 5 views
5

Wenn ich zuerst eine Datei herunterladen und über SSH.NET hochladen, funktioniert alles gut.Upload von ByteArray/MemoryStream mit SSH.NET - Datei wird mit der Größe 0KB erstellt

client.DownloadFile(url, x) 
Using fs= System.IO.File.OpenRead(x) 
    sFtpClient.UploadFile(fs, fn, True) 
End Using 

Allerdings muss ich jetzt (nicht die Datei herunterladen), sondern um einen Strom der Datei hochladen: Was geschieht, ist, dass die UploadFile Methode denkt, dass es gelungen, aber auf dem tatsächlichen FTP

Dim ba As Byte() = client.DownloadData(url) 
Dim stream As New MemoryStream() 
stream.Write(ba, 0, ba.Length) 
sFtpClient.UploadFile(stream, fn, True) 

, Die Datei wird mit der Größe 0 KB erstellt.

Was mache ich bitte falsch? Ich habe versucht, die Puffergröße auch hinzuzufügen, aber es hat nicht funktioniert.

Ich habe Code im Internet gefunden. Sollte ich etwas tun wie folgt:

Antwort

4

Nach dem Schreiben in den Stream befindet sich der Streamzeiger am Ende des Streams. Wenn Sie also den Stream an die .UploadFile übergeben, liest es den Stream vom Zeiger (der sich am Ende befindet) bis zum Ende. Daher wird nichts geschrieben. Und es wird kein Fehler ausgegeben, weil sich alles wie gewünscht verhält.

benötigen Sie den Zeiger auf den Anfang zurückgesetzt werden, bevor der Strom an die .UploadFile vorbei:

Dim ba As Byte() = client.DownloadData(url) 
Dim stream As New MemoryStream() 
stream.Write(ba, 0, ba.Length) 
' Reset the pointer 
stream.Position = 0 
sFtpClient.UploadFile(stream, fn, True)