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

 

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

Παίζοντας με τα path

Îåêßíçóå áðü ôï ìÝëïò epp1123. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 02-06-2008, 15:50. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  02-06-2008, 13:39 42576

    Παίζοντας με τα path

    Καταρχάς καλησπέρα.

    Ανεβάζοντας  αρχεία εικόνων στο server  ακολουθώ την εξής  λογική:
     
    Αποθηκεύω τo path, που βρίσκεται ο φάκελος, συν το όνομα του αρχείου (μαζί με τη επέκταση) στη βάση σαν κείμενο

    Θέλω όμως να αποθηκεύω το relative path +  όνομα αρχείου (../SuppliersProductIcons/onomaArxeiou.jpg πχ) στη βάση και όχι το physical path + όνομα, γιατί έτσι δε μου δείχνουν τις εικόνες τα <asp:img>. Το path που "βλέπουν" και δείχνουν τις εικόνες είναι σαν αυτό στη παρένθεση.

    Πως καταφέρνουμε να σώσουμε το relative και όχι το absolute, ή αν δεν γίνεται αυτό τι άλλο μπορώ να κάνω;
  •  02-06-2008, 14:15 42579 σε απάντηση της 42576

    Re: Παίζοντας με τα path

    Απλή λύση είναι να χρησιμοποιήσεις το System.IO.Path.GetFilename όταν σώνεις κάτι στην βάση και να σώνεις μόνο το όνομα του αρχείου, να χρησιμοποιήσεις μια global μεταβλητή (ή web.config appsetting) για τα paths που θέλεις και να παράγεις τα relative paths δυναμικά.  Αυτό θα σε γλιτώσει πιθανά ταλαίπωρα mass update στην βάση σε περίπτωση που θέλεις να αλλάξεις folders.

     


    The people of the straight land have really got it made, a warm friendly sleep from the craddle to the grave
  •  02-06-2008, 14:25 42580 σε απάντηση της 42579

    Απ: Re: Παίζοντας με τα path

    Αν έχετε τη καλοσύνη δε μου λέτε και ποιο tag πρέπει να επιλέξω για να το κάνω αυτό γιατί μέσα στο app setting μου βγαίνει ένας σωρός. Ευχαριστώ πολύ.
  •  02-06-2008, 14:43 42582 σε απάντηση της 42580

    Απ: Re: Παίζοντας με τα path

    Χμ ακόμα βλέπω έχεις πάρει το σφυρί και τα βαράς όλα. Λοιπόν back to the basics.
    Πήγαινε στο AppSettings στο web.config και γράψε μια εγγραφή όπως η παρακάτω :

     <appSettings>
        <add key ="AttachmentsFolder" value="C:\myIISAttach"/>
       </appSettings>

    Πολύ εύκολα στό κώδικα σου μπορείς να την καλείς έτσι ώστε να έχεις standard path

    Response.Write(ConfigurationManager.AppSettings["AttachmentsFolder"] + "\\" + FilesIdea.Name)
    Έτσι ακολουθώντας την συμβουλή του συναδέλφου θα κρατάς στη βάση σου μόνο τα ονόματα των αρχείων  και θα χτίζεις το path στον κώδικα σου..


    Επιμένω όμως ότι όλα αυτά είναι απλά αν κάτσεις λίγο και μελετήσεις και πάρεις τα πράγματα με μια σειρά.
    άσε για λίγο το σφυρί του ΘορBig Smile

     

    Manos
  •  02-06-2008, 14:45 42583 σε απάντηση της 42582

    Απ: Re: Παίζοντας με τα path

    Ευχαριστώ πολύ. Και για να αποφύγουμε το σφυρί ξανά, υπάρχει κάνα reference μόνο για το web.config ή μπα;;;

    Όσο για το σφυρί, να ενημερώσω πως ότι κάνω είμαι υποχρεωμένος να το κάνω μιας και είναι κομμάτι της πρακτικής μου, δεν μπορώ να το αποφύγω. Και θα ήθελα να ξεκινήσω από τα πιο απλά και να τα πάρω βήμα βήμα αλλά με βάλανε στα βαθιά αμέσως. Καλώς ή κακώς δεν ξέρω,  αλλά δεν μπορώ να κάνω αλλιώς.
  •  02-06-2008, 15:50 42584 σε απάντηση της 42583

    Απ: Re: Παίζοντας με τα path

    Τα πράγματα είναι πολύ απλά και δεν χρειάζεται ιδιαίτερος κώδικας ή πείραγμα του web.config. Όσον αφορά τα tags, μέσα στο Visual Studio, πήγαινε πάνω σε ένα tag και πάτα το F1. Αν έχεις εγκαταστήσει το MSDN library θα σου δείξει κατευθείαν το help για το tag, αλλιώς θα φορτώσει την αντίστοιχη σελίδα από το http://msdn.microsoft.com. Και φυσικά, μπορείς να βρεις τα πάντα στο MSDN, και τα references και άρθρα. Ένα απλό search να κάνεις θα βρεις ό,τι θέλεις. Κι εμείς αυτό κάνουμε κάθε φορά που κάποιος ρωτάει κάτι. Έτσι θα μπορείς να καταλάβεις και τί σου απαντάει ο καθένας κάθε φορά και πως ταιριάζει με αυτά που προσπαθείς να κάνεις.

        Όσον αφορά τα relative paths, οποιοδήποτε path δεν ξεκινάει με "http://" είναι relative. Όσα ξεκινάνε με "/" είναι είναι σε σχέση με το root folder του web site σου. Έτσι, το tag <img src="http://www.dotnetzone.gr/Images/SampleImage.jpg" /> αναφέρεται σε μία εικόνα η οποία βρίσκεται στο Images folder κάτω από το root του site σου.
        Αν παραλείψεις το "/" το URL θα είναι σχετικό ως προς το folder της σελίδας στην οποία βρίσκεται.  Το tag <img src="http://www.dotnetzone.gr/Images/SampleImage.jpg" /> αναφέρεται σε μία εικόνα η οποία βρίσκεται στο Images folder κάτω από το folder στο οποίο βρίσκεται η σελίδα σου. Οι δύο παραπάνω περιπτώσεις είναι απλή HTML και δουλεύουν ανεξάρτητα από το ASP.NET.
        Τέλος, η μορφή <asp:image runat="server" id="Image1" ImageUrl="~/Images/SampleImage.jpg" /> δουλεύει με ψάχνει για το folder Images σε σχέση με το root του web application και όχι του site. Ο λόγος είναι ότι μπορείς να έχεις διαφορετικά web applications σε διαφορετικά folders. Αν χρειαστεί να μετακινήσεις το web application από ένα folder σε άλλο, ή από το μηχάνημα σου στον server παραγωγής, τα URL εξακολουθούν να δουλεύουν.
    Ρίξε μία ματιά στο ASP.NET Web Site Paths για τους διάφορους τρόπους να γράψεις ένα relative path και τί σημαίνει ο καθένας.

    Όποια μορφή και να χρησιμοποιήσεις, θα δουλέψει χωρίς τροποποιήσεις στο web.config και χωρίς να μετατρέψεις το path σε κάτι άλλο. Απλά, φρόντισε το path στο οποίο φορτώνεις τα αρχεία σου να είναι κάτω από το root της εφαρμογής σου και αποθήκευσε το relative path στη βάση. Αν μάλιστα χρησιμοποιείς ένα gridview, listiview ή κάποιο άλλο control το οποίο επιτρέπει data binding, μπορείς να χρησιμοποιήσεις την Eval() για να περάσεις το URL από το DataSet απευθείας στο control, π.χ. <asp:image runat="server" ImageUrl="<%# Eval("MyUrlField") #%>" />.

    Και πριν ρωτήσεις τί είναι το data binding, διάβασε στο documentation το "Binding to Databases".


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems