2010-03-05 30 views
6

Gereksinim, her gece 1500 jpg görüntüleri yükleyin, aşağıdaki kod açılır ve bir çok kez bağlantıyı kapatır, daha iyi bir yol olup olmadığını merak ediyorum. Çoklu FTP Dosyasını Yükleyin

... Bu bir kod parçacığı, yani orada değişkenler burada başka yerde

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 

Bazı yorumların tanımlandığından emin:

Evet, picCount gereksiz olduğunu biliyorum ... Geç de

oldu gece.

ftpImagePath, picDir, ftpUsername, ftpPassword tüm değişkenler

Evet, bu

Bu kod çalışıyor, ben

İlgili Soru optimize etmek arıyorum şifresiz geçerli: FTP Upload multiple files without disconnect using .NET

+0

Not: Bu kod ile sahip sorunu yeni bir FTP bağlantısı açıp duruyor olmasıdır. Bu uygulama her çalıştığında 1500 kez açıldı ve kapatıldı. – Markus

cevap

5

Bir seferde birden fazla dosya göndermek istiyorsanız (sipariş önemli değilse) dosyaları senkronize olmayan bir şekilde gönderebilirsiniz. * Çeşitli bir göz başlayın var ve Ek açık bir bağlantı tutmak için kullanılır FtpWebRequest.KeepAlive mülk, içine görünebilir/yeniden kullanım için önbelleğe vb FtpWebRequest.BeginGetResponse ve FtpWebRequest.EndGetResponse

olarak Bitiş * yöntemleri. ,

0

15 zip dosyaları oluşturmak örneğin, farklı demetler halinde dosyaları sıkıştırmak mümkün mü);

Hmmm, ayrıca dev bir katran dosyası oluşturmayı deneyin ve bir bağlantı ile bir akım halinde tek bir dosya gönderebilir her biri 100 görüntüye sahip ve daha sonra zip dosyasını yükleyecek, böylece daha hızlı ve daha verimli olacak. Bir seferde Açık 3-4 FTP bağlantılarını ve paralel dosya yüklemek -

(örnek SharpZipLib için) dinamik

0

Kullanım Multithreading zip oluşturmak için ücretsiz kütüphaneler vardır.

0

Üçüncü taraf FTP istemci kitaplıklarından birini kullanmayla ne dersiniz? Çoğu, bu FTP'nin vatansız bir protokol olmadığını (FtpWebRequest'in aksine) saklamayı denemez.

Aşağıdaki kod bizim Rebex FTP/SSL kullanıyor, ancak theare da diğerleri.

// 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(); 

Ya

(tüm kaynak dosyaları aynı klasörde varsa):

// 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();