2010-03-05 5 views
6

आवश्यकता, हर रात 1500 जेपीजी छवियां अपलोड करें, नीचे कोड खुलता है और कनेक्शन को कई बार बंद करता है, मैं सोच रहा हूं कि कोई बेहतर तरीका है या नहीं।एकाधिक एफ़टीपी फाइलें अपलोड करें

... यह एक कोड का टुकड़ा है, इसलिए वहाँ चर यहाँ हैं कहीं और

Dim picClsRequest = DirectCast(System.Net.WebRequest.Create(ftpImagePath), System.Net.FtpWebRequest) 
Dim picClsStream As System.IO.Stream 

Dim picCount As Integer = 0 
For i = 1 To picPath.Count - 1 
    picCount = picCount + 1 
    log("Sending picture (" & picCount & " of " & picPath.Count & "):" & picDir & "/" & picPath(i)) 
    picClsRequest = DirectCast(System.Net.WebRequest.Create(ftpImagePath & "/" & picPath(i)), System.Net.FtpWebRequest) 
    picClsRequest.Credentials = New System.Net.NetworkCredential(ftpUsername, ftpPassword) 
    picClsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile 
    picClsRequest.UseBinary = True 
    picClsStream = picClsRequest.GetRequestStream() 

    bFile = System.IO.File.ReadAllBytes(picDir & "/" & picPath(i)) 
    picClsStream.Write(bFile, 0, bFile.Length) 
    picClsStream.Close() 

Next 

कुछ टिप्पणियां परिभाषित कर रहे हैं कि:

हाँ, मैं जानता हूँ कि picCount अनावश्यक है ... यह देर से पर था रात।

ftpImagePath, picDir, ftpUsername, ftpPassword सभी चर रहे हैं

हाँ, यह एन्क्रिप्ट नहीं किए गए

इस कोड को ठीक काम करता है, मैं

संबंधित प्रश्न अनुकूलन करने के लिए देख रहा हूँ है: FTP Upload multiple files without disconnect using .NET

+0

नोट: समस्या मैं इस कोड के साथ है कि यह एक नया FTP कनेक्शन खोलने रखता है। जब भी यह ऐप चलता है तो यह 1500 बार खोला और बंद हो जाता है। – Markus

उत्तर

5

यदि आप एक समय में एक से अधिक फाइल भेजना चाहते हैं तो आप फ़ाइलों को असीमित रूप से भेजने पर एक नज़र डाल सकते हैं (यदि आदेश महत्वपूर्ण नहीं है)। विभिन्न पर एक नज़र शुरू है * और अंत * तरीकों ऐसे FtpWebRequest.BeginGetResponse और FtpWebRequest.EndGetResponse आदि

के रूप में इसके अतिरिक्त आप FtpWebRequest.KeepAlive संपत्ति है, जो एक कनेक्शन खुला रखने के लिए प्रयोग किया जाता है इस पर गौर कर सकता है/पुनः उपयोग के लिए कैश की गई।

हममम, आप भी एक विशाल टार फ़ाइल बनाने की कोशिश कर सकते हैं और एक कनेक्शन के साथ एक धारा में एकल फाइल भेज;)

0

यह अलग गुच्छों में फ़ाइलें ज़िप करने, उदाहरण के लिए 15 ज़िप फ़ाइलें बनाने संभव है, प्रत्येक में 100 छवियां होती हैं और फिर ज़िप अपलोड करते हैं, इस तरह यह अधिक तेज़ और अधिक कुशल होगा। एक समय में खुला 3-4 एफ़टीपी कनेक्शन और समानांतर में फ़ाइलों को अपलोड -

मुक्त (उदाहरण के sharpZipLib के लिए) गतिशील रूप से जिप बनाने के लिए

0

उपयोग बहु सूत्रण पुस्तकालयों रहे हैं।

0

किसी तीसरे पक्ष के एफ़टीपी क्लाइंट पुस्तकालयों का उपयोग करने के बारे में क्या? उनमें से अधिकतर छिपाने की कोशिश नहीं करते हैं कि एफ़टीपी एक स्टेटलेस प्रोटोकॉल नहीं है (FtpWebRequest के विपरीत)।

निम्नलिखित कोड हमारे Rebex FTP/SSL का उपयोग करता है लेकिन रंग भी कई अन्य हैं।

// create client, connect and log in 
Ftp client = new Ftp(); 
client.Connect("ftp.example.org"); 
client.Login("username", "password"); 
client.ChangeDirectory("/ftp/target/fir"); 

foreach (string localPath in picPath) 
{ 
    client.PutFile(localPath, Path.GetFileName(localPath)); 
} 

client.Disconnect(); 

या (अपने सभी स्रोत फ़ाइलें एक ही फ़ोल्डर में हैं):

// create client, connect and log in 
Ftp client = new Ftp(); 
client.Connect("ftp.example.org"); 
client.Login("username", "password"); 

client.PutFiles(
    @"c:\localPath\*", 
    "/remote/path", 
    FtpBatchTransferOptions.Recursive, 
    FtpActionOnExistingFiles.OverwriteAll); 

client.Disconnect();