Upload πολλά αρχεία με ftp

Συζητήσεις για τις γλώσσες του dot Net και για του Visual Studio της Microsoft

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Upload πολλά αρχεία με ftp

Δημοσίευση από Antonis78 » 27 Σεπ 2011 13:26

Καλησπέρα

έχω φτιάξει ένα console application που τραβάει κάποια αρχεία από τον υπολογιστή μου και τα ανεβάζει σε ένα folder στον remote server. Επειδή κάθε φορά που τρέχει κάνει περίπου 20 λεπτά (για 500 περίπου αρχεία από 50ΚΒ εώς 2ΜΒ το καθένα) θα ήθελα να μου πείτε αν υπάρχει κάποιος τρόπος να ανεβούν πιο γρήγορα. Ο τρόπος που χρησιμοποιώ τώρα είναι:

Κώδικας: Επιλογή όλων

For Each kvp As KeyValuePair(Of String, String) In filesCollection
            Dim sourceFile As String = kvp.Key
            Dim destFile As String = kvp.Value
           
            Console.Write("Uploading file: " & sourceFile & " -> " & destFile)
            Dim ftpRequest As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create(ftpUri & "/" & destFile), System.Net.FtpWebRequest)

            ftpRequest.Credentials = New System.Net.NetworkCredential(ftpUsername, ftpPassword)
            ftpRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile

            Dim fileContents() As Byte = File.ReadAllBytes(sourceFile)

            Dim requestStream As System.IO.Stream = ftpRequest.GetRequestStream()
            requestStream.Write(fileContents, 0, fileContents.Length)
            requestStream.Close()

            Dim requestResponse As System.Net.FtpWebResponse = ftpRequest.GetResponse
            If requestResponse.StatusCode = Net.FtpStatusCode.ClosingData Then
                Console.WriteLine(" -> Uploaded!")
                Return True
            Else
                Console.WriteLine(" -> Could not upload file!")
                WriteLogMsg("File: " & sourceFile & " -> COULD NOT BE UPLOADED!")
                WriteLogMsg(requestResponse.StatusDescription)
                Return False
            End If
Next

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Upload πολλά αρχεία με ftp

Δημοσίευση από gvre » 27 Σεπ 2011 14:00

Αρχικά πρέπει να δεις αν με ένα ftp client κάνει πάλι 20 λεπτά να τα ανεβάσει. Αν η καθυστέρηση είναι από το δίκτυο πρέπει να βρεις άλλη λύση. Αν τα αρχεία δεν αλλάζουν συχνά, μπορείς να χρησιμοποιήσεις το rsync για τη μεταφορά (αν έχεις αυτή τη δυνατότητα).

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Upload πολλά αρχεία με ftp

Δημοσίευση από Antonis78 » 27 Σεπ 2011 14:26

Να περιγράψω λίγο την διαδικασία:
πρώτα συνδέομαι στον remote server και σβήνω όλα τα αρχεία στον φάκελο, μετά κάνω ένα query στην βάση, παίρνω τα paths για τα αρχεία και δημιουργώ ένα collection. Κατόπιν, κάνω iterate αυτό το collection και ανεβάζω ένα-ένα τα αρχεία.

Το πρόβλημα είναι ότι τα αρχεία αυτά βρίσκονται σε ένα φάκελλο με άλλα 2000 αρχεία και δεν μπορώ να ξέρω κάθε φορά ποια θα μου φέρει το query, για αυτό δεν είναι εύκολο να κάνω test με ftp client ούτε το rsynch μπορεί να με βοηθήσει στην περίπτωσή μου.

Σκεφτόμουν μήπως δεν πρέπει να ανοιγω-κλείνω το ftpRequest για κάθε αρχείο αλλά να το κρατάω ανοιχτό για όλη την διαδικασία. Έτσι ίσως να γλιτώσω λίγο χρόνο ( ; ). Πως γίνεται αυτό όμως;

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Upload πολλά αρχεία με ftp

Δημοσίευση από gvre » 27 Σεπ 2011 14:35

Η σύνδεση θα πρέπει να γίνεται μια φορά στην αρχή (έξω από το loop) και να κλείνει όταν τελειώσει η μεταφορά. Δεν ξέρω πόσο χρόνο θα κερδίσεις από αυτό. Το βασικό είναι να δεις αν η καθυστέρηση είναι από το δίκτυο ή όχι. Αν είναι από το δίκτυο θα πρέπει να εξετάσεις διαφορετικές λύσεις.

edit: Βλέπω ότι υπάρχει δυνατότητα για connection pooling, keepalive, async κλπ. Περισσότερα στο http://stackoverflow.com/questions/1016 ... webrequest
Τελευταία επεξεργασία από το μέλος gvre την 27 Σεπ 2011 15:24, έχει επεξεργασθεί 1 φορά συνολικά.

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Upload πολλά αρχεία με ftp

Δημοσίευση από Antonis78 » 27 Σεπ 2011 15:05

Λοιπόν, έκανα μία δοκιμή με τον FileZilla και έκανε 12 λεπτά. Άρα κάτι πρέπει να κάνω με τον κώδικά μου. Τι πρέπει να αλλάξω για να συνδέομαι μία φορά και να ανεβάζει τα αρχεία;


Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Upload πολλά αρχεία με ftp

Δημοσίευση από Antonis78 » 28 Σεπ 2011 12:29

Ευχαριστώ πολύ για την απάντηση. Ακολούθησα κάποια από αυτά που αναφέρουν εκεί και το παράδειγμα που έχει εδώ και βρήκα την λύση. Η διαδικασία έπεσε στα 11 λεπτά, όσο και με τον FileZilla δηλαδή.

airboy
Δημοσιεύσεις: 1
Εγγραφή: 27 Οκτ 2012 14:24

Upload πολλά αρχεία με ftp

Δημοσίευση από airboy » 27 Οκτ 2012 14:27

Συγνώμη για το άσχετο του θέματος, αλλά μιας και βρήκες λύση θα ήθελα να σε ρωτήσω κάτι... Προσπαθώ να ανεβάσω και εγώ κάτι αρχεία σε FTP server αλλά τα ελληνικά αρχεία μου τα ανεβάζει με όνομα κάπως έτσι: ??????? το αντιμετώπισες αυτό? Ευχαριστώ.

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Upload πολλά αρχεία με ftp

Δημοσίευση από Antonis78 » 30 Οκτ 2012 00:03

Φίλε μου, δυστυχώς δεν μπορώ να σε βοηθήσω, μια και δεν ανεβάζω αρχεία με ελληνικούς χαρακτήρες.

Απάντηση

Επιστροφή στο “dot Net και Visual Studio”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης