2016-03-08 12 views
5

के साथ बनाई गई है जब मैं पहली बार फ़ाइल डाउनलोड करता हूं और इसे SSH.NET के माध्यम से अपलोड करता हूं, तो सभी ठीक काम करते हैं।एसएसएच.NET का उपयोग करके बाइटएरे/मेमोरीस्ट्रीम से अपलोड करें - फ़ाइल 0KB

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

हालांकि मैं अब (फ़ाइल डाउनलोड नहीं) चाहिए, लेकिन फ़ाइल की एक धारा अपलोड करें:

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

क्या हो रहा है UploadFile विधि मानना ​​है कि यह सफल रहा है, लेकिन वास्तविक एफ़टीपी पर, फ़ाइल आकार 0 केबी के साथ बनाई गई है।

मैं क्या गलत कर रहा हूं? मैंने बफर आकार भी जोड़ने की कोशिश की, लेकिन यह काम नहीं किया।

मुझे वेब पर कोड मिला। क्या मुझे ऐसा कुछ करना चाहिए:

client.ChangeDirectory(pFileFolder); 
client.Create(pFileName); 
client.AppendAllText(pFileName, pContents); 

उत्तर

4

स्ट्रीम पर लिखने के बाद, स्ट्रीम पॉइंटर स्ट्रीम के अंत में है। तो जब आप .UploadFile पर स्ट्रीम पास करते हैं, तो यह पॉइंटर (जो अंत में है) से स्ट्रीम को अंत तक पढ़ता है। इसलिए, कुछ भी लिखा नहीं है। और कोई त्रुटि जारी नहीं की जाती है, क्योंकि सब कुछ डिज़ाइन के रूप में व्यवहार करता है।

आप शुरुआत करने के लिए सूचक रीसेट करने के लिए, .UploadFile को धारा पार करने से पहले की जरूरत है:

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) 
संबंधित मुद्दे

 संबंधित मुद्दे