Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Αλλαγή ονόματος αρχείου μέσω FileUpload

Îåêßíçóå áðü ôï ìÝëïò ioagia. Τελευταία δημοσίευση από το μέλος ioagia στις 19-01-2009, 16:37. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-01-2009, 10:11 47594

    Αλλαγή ονόματος αρχείου μέσω FileUpload

    Καλημερα σε ολο το dotNet!
    Χρησιμοποιω ενα FileUpload tool στη σελιδα μου για να μπορεί ο χρηστης να ανεβασει ενα αρχείο της επιθυμιας του. Δυστυχώς η υπαρξη μερικων special χαρακτηρων σε ενα ονομα αρχειου που θα κανει Upload ενας χρηστης μου αφαιρει την δυνατοτητα να διαβασω αυτο το αρχειο.
    Για να εχω προσβαση σε ολα τα αρχεια θέλω να αντικαταστισω το ονομα του αρχειου που ανεβαζει ο χρηστης με ενα ονομα αρχειου που θα επιλεγω εγω.( πχ. με την ημερομηνια κ την ωρα που ανεβηκε το αρχειο, χρησιμοποιώντας την DateTime.Now.ToString() ).

    Δυστυχως οσο κ αν προσπάθησα δεν κατάφερω να πετύχω κατι. Μπορει καποιος να βοηθήσει αλλαζωντας τον κώδικα ή εστω προτεινοντας κατι διαφορετικο?

    Ο κώδικας που χρησιμοποιω για να ελενξω αν υπαρχει στο FileUpload μου αρχειο κ επειτα να το σωσω στο server μου ειναι ο ακολουθως:

    VB:

            If FileUpload1.HasFile Then
                Dim strName As String = FileUpload1.PostedFile.FileName
                hw.Write("<b>File Uploaded: </b>" & FileUpload1.FileName)
                hw.WriteBreak()

                FileUpload1.SaveAs(HttpContext.Current.Request.PhysicalApplicationPath & "\uploads\" & FileUpload1.FileName)
                hw.Write("<b>Total number of pages: </b>" & totalPages)
                hw.WriteBreak()

            End If

  •  13-01-2009, 12:01 47598 σε απάντηση της 47594

    Απ: Αλλαγή ονόματος αρχείου μέσω FileUpload

    Για να γινω λιγο πιο σαφής, θα ηθελα στην ουσια :
    είτε, να μπορεσω να αλλαξω τελειως το Filename του αρχειου,
    είτε, να κανω encode το Filename σε Unicode έτσι ωστε να μην μου δημιουργει προβλημα στην αναγνωση.

    Ευχαριστώ προκαταβολικα!

  •  13-01-2009, 12:16 47599 σε απάντηση της 47598

    Απ: Αλλαγή ονόματος αρχείου μέσω FileUpload

    Όλα τα string στο .NET είναι ήδη Unicode. Τί πρόβλημα αντιμετωπίζεις και ποιούς χαρακτήρες θέλεις να αφαιρέσεις? Δοκίμασες μία απλή String.Replace για να αφαιρέσεις τους χαρακτήρες που δεν θέλεις από το όνομα? Εμφανίζεται κάποιο μήνυμα λάθους? Ποιό?


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  13-01-2009, 14:45 47601 σε απάντηση της 47599

    Απ: Αλλαγή ονόματος αρχείου μέσω FileUpload

    Παναγιώτη,
      Το προβλημα που αντιμετωπιζω ειναι οτι δεν μπορω να ανοιξω ενα αρχειο, που εχει ηδη κανει upload ενας χρηστης, απο τον server, οταν αυτο περιέχει special χαρακτηρες (παραδειγμα: κινεζικους ή αραβικούς χαρακτηρες).
      Δεν εμφανιζεται καποιο μηνυμα λαθους στη προσπαθεια να ανεβασει καποιος ενα τετοιο αρχειο.
      Προσπάθησα να χρησιμοποιήσω την String.Replace αλλα αδυνατω να  διατρεξω το string του Filename έναν έναν χαρακτηρα και στη συνεχεια να προσδιορισω ποιοι απο αυτους τους χαρακτηρες εχουν διαφορετικο encoding.
      Αν υπάρχει καποιος ηδη ετοιμος κωδικας που υλοποιει κατι τετοιο θα μου ηταν φοβερα χρησιμος.

    Ευχαριστω πολυ για την βοήθεια.


  •  13-01-2009, 15:00 47602 σε απάντηση της 47601

    Απ: Αλλαγή ονόματος αρχείου μέσω FileUpload

    Επαναλαμβάνω, τα strings είναι πάντα, ΠΑΝΤΑ Unicode. ΔΕΝ έχουν encoding. Το θέμα encoding εμφανίζεται μόνο όταν ένα string μετατρέπεται σε char array. Η String.Replace τώρα θα αντικαταστήσει όλους τους χαρακτήρες με τη μία. Δεν χρειάζεται να πας τους ελέγξεις ένα-ένα.

    Και πάλι όμως δεν λες ποιό είναι το πρόβλημα. Δηλαδή, προσπαθείς να κάνεις File.RealAllText και δεν μπορείς να διαβάσεις το αρχείο? Εμφανίζεται κάποιο exception? Εφόσον το αρχείο έχει αποθηκευθεί στο σκληρό θα πρέπει να είναι δυνατή και η ανάγνωση του. Αν υπήρχε πρόβλημα στο filename το λειτουργικό δεν θα δεχόταν καν να αποθηκεύσει με αυτό το όνομα. Μήπως το περιεχόμενο του αρχείου είναι σε κάποιο encoding και όχι σε Unicode? Σε αυτή την περίπτωση μπορείς να χρησιμοποιήσεις την ReadAllText με παράμετρο το Encoding του αρχείου, αν το ξέρεις.

    Ο μόνος τρόπος να σε βοηθήσουμε είναι να μας πεις τί κάνεις και ποιό είναι το πρόβλημα. Όχι "δεν παίζει", αλλά "διαβάζω τα περιεχόμενα με την File.ReadAlltext και τρώω το XYZ exception", ή "διαβάζω το αρχείο και τα δεδομένα είναι αλαμπουρνέζικα".

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  14-01-2009, 15:33 47626 σε απάντηση της 47602

    Απ: Αλλαγή ονόματος αρχείου μέσω FileUpload

    Μετα απο ψαξιμο εντωπισα οτι το προβλημα οφείλεται στον server στον οποιο ανεβαινουν τα αρχεια που κανει Upload καθε χρηστης και εχει να κανει με τους non-ascii χαρακτηρες στο ονομα του αρχειου (τους οποιους αδυνατει να διαβασει κ τους αντικαθιστα με: ?).

    Οποτε το προβλημα μου εντοπίζεται στο εξης: στην αντικατάσταση των non-ascii χαρακτηρων του ονοματος του καθε αρχείου .
    (ελπιζω αυτη τη φορα να ημουν πιο κατατοπιστικος)

    Απο ψαξιμο στο web εντοπησα οτι η πιο προσιτη λυση ειναι με χρηση Regex αλλα εξακολουθω να μην μπορω να επιλυσω το προβλημα.

    Ευχαριστω πολυ για την υπομονη σαςSmile
  •  19-01-2009, 16:37 47753 σε απάντηση της 47626

    Απ: Αλλαγή ονόματος αρχείου μέσω FileUpload

    Λοιπον βρηκα μια ικανοποιητικη λυση για το προβλημα που ανεφερα στο προιγουμενο post και την ανεβαζω για να βοηθησει οποιον τυχον εχει το ιδιο προβλημα να επιλυσει.
    Ο παρακατω κωδικας παιρνει το ονομα του αρχειου που ανεβαζει ο χρηστης μεσα απο το FileUpload tool και αφαιρει ολους τους non-ascii χαρακτηρες. Αν το αρχειο περιεχει μονο non ascii χαρακτηρες το αρχειο αποθηκεθεται μονο με την καταληξη του (κατι που σου δινει την δυνατοτητα να το ανοιξεις).

    Ελπιζω να βοηθησε λιγο....

                Dim strName As String = FileUpload1.PostedFile.FileName
                Dim sOut As String = ""

                Dim chars() As Char = strName.ToCharArray()
                For Each c As Char In chars
                    If c > Chr(127) Then
                    Else
                        sOut &= c
                    End If
                Next
                FileUpload1.SaveAs(HttpContext.Current.Request.PhysicalApplicationPath & "\uploads\" & sOut)
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems