2011-06-08 14 views
6

के संबंध में सापेक्ष पथ में भौतिक पथ को परिवर्तित करना मैं एएसपीनेट 4 और सी # का उपयोग करता हूं।http: // localhost:

मेरे पास यह कोड है जो मुझे छवि के लिए भौतिक पथ खोजने की अनुमति देता है। जैसा कि आप देख सकते हैं कि मुझे अपनी मशीन भौतिक पाग फ़ाइल मिलती है: /// सी:।

string pathRaw = HttpContext.Current.Request.PhysicalApplicationPath + "Statics\\Cms\\Front-End\\Images\\Raw\\"; 

परिणाम:

file:///C:/......../f005aba1-e286-4d9e-b9db-e6239f636e63.jpg 

लेकिन मैं अपने वेब अनुप्रयोग के सामने अंत में इस छवि प्रदर्शित की जरूरत है ताकि मैं इस तरह एक परिणाम की आवश्यकता होगी:

http://localhost:1108/Statics/Cms/Front-End/Images/Raw/f005aba1-e286-4d9e-b9db-e6239f636e63.jpg 

यह कैसे ?

पीएस: मुझे की आवश्यकता है पथ पथ के परिणाम को परिवर्तित करें।

आशा है कि मैं दुर्भाग्य से खुद को व्यक्त करने में सक्षम था, मुझे इस मामले में शब्दावली के बारे में निश्चित नहीं है।

आपकी मदद के लिए धन्यवाद!

+0

क्या कोई कारण है कि आप केवल सापेक्ष पथ (/ सांख्यिकी/सीएमएस/....) का उपयोग नहीं कर सकते हैं? –

+0

धन्यवाद आपकी टिप्पणी के लिए डेव लेकिन मुझे पथरॉ के परिणाम को बदलने की ज़रूरत है, मैं अपने कोड में सापेक्ष पथ का उपयोग नहीं कर सकता। क्या आपको कोई विचार है कि इसे कैसे करें?adnvace – GibboK

+0

में धन्यवाद, आप एक यूआरएल के लिए एक भौतिक पथ को गतिशील रूप से परिवर्तित नहीं कर सकते हैं - केवल एक चीज जो किसी भी समझ में आती है यदि आप संभावित रूट मानों को जानते हैं, और वे किस URL को अंततः मैप किए गए हैं, और फिर रूट पथ को प्रतिस्थापित करने के लिए कुछ स्ट्रिंग मैनिपुलेशन किया है यूआरएल के साथ भाग, और फिर आगे slashes के साथ वापस slashes ... लेकिन मैं अभी भी समझ में नहीं आता क्यों आपको अपने यूआरएल पाने के लिए भौतिक पथ का उपयोग करने की आवश्यकता है? निश्चित रूप से, अगर यह एएसपी.NET अनुप्रयोग के अंदर चल रहा है, तो आप छवि को पूरा करने के लिए सापेक्ष पथ का उपयोग कर सकते हैं? –

उत्तर

11

सबसे आसान काम का उपयोग कर ऐसा करने के लिए शारीरिक आवेदन पथ से छुटकारा पाने के है निर्माण। यदि आप अपने कोड में ऐसा नहीं कर सकते हैं, तो इसे पथ पथ चर से हटा दें। इस तरह:

public string GetVirtualPath(string physicalPath) 
{ 
    if (!physicalPath.StartsWith(HttpContext.Current.Request.PhysicalApplicationPath)) 
    { 
     throw new InvalidOperationException("Physical path is not within the application root"); 
    } 

    return "~/" + physicalPath.Substring(HttpContext.Current.Request.PhysicalApplicationPath.Length) 
     .Replace("\\", "/"); 
} 

कोड पहले यह जांचने के लिए जांच करता है कि पथ एप्लिकेशन रूट के भीतर है या नहीं। यदि नहीं, तो फाइल के लिए यूआरएल को समझने का कोई तरीका नहीं है, इसलिए अपवाद फेंक दिया गया है।

आभासी पथ भौतिक अनुप्रयोग पथ को अलग करके, सभी बैक-स्लेश को स्लेश में परिवर्तित करके और "~/" के साथ पथ को उपसर्गित करने के लिए बनाया गया है ताकि यह इंगित किया जा सके कि इसे एप्लिकेशन रूट के सापेक्ष समझा जाना चाहिए।

इसके बाद आप आभासी पथ को ResolveClientUrl(virtualPath) का उपयोग कर ब्राउज़र में आउटपुट के लिए एक सापेक्ष पथ में परिवर्तित कर सकते हैं।

0

आप इसके लिए Server.MapPath का उपयोग कर सकते हैं।

ApplicationPath की
string pathRaw = System.Web.HttpContext.Current.Server.MapPath(“somefile.jpg“); 
+0

मुझे चर पथ पथ बदलने की जरूरत है ... कोई विचार? – GibboK

+0

यह वह नहीं है जो वह पूछ रहा है - उसके पास पहले से ही शारीरिक पथ है और इसे एक यूआरएल में बदलने की जरूरत है - जो संभव नहीं है। मुझे लगता है कि वह इस गलत तरीके से आ रहा है। –

+0

डेव से सहमत - सवाल यह है कि भौतिक से आभासी कैसे जाना है। – Losbear

0

उपयोग करें - सर्वर पर ASP.NET अनुप्रयोग की आभासी आवेदन रूट पथ हो जाता है।

Label1.Text = Request.ApplicationPath; 
Image1.ImageUrl = Request.ApplicationPath + "/images/Image1.gif"; 
+0

प्रणय मैं आपके कोड से ट्रिड करता हूं (मुझे पथर परिवर्तनीय के साथ सौदा करने की आवश्यकता है) और यह परिणाम है: http: // localhost: 1108/C: /....../f005aba1-e286-4d9e-b9db-e6239f636e63। jpg क्या आपको पता है कि इसे कैसे हल किया जाए? धन्यवाद – GibboK

+0

मुझे लगता है कि आप ' ' – eFloh

1

आपके आवेदन का उपयोग कर Request.ApplicationPath तो एक रिश्तेदार पथ पाने के लिए this question से जवाब का उपयोग की जड़ प्राप्त करें।

इसे थोड़ी-थोड़ी ट्विकिंग की आवश्यकता हो सकती है लेकिन यह आपको जो भी हो रहा है उसे करने की अनुमति देनी चाहिए।

1

Request.ApplicationPath करके अपने pathRaw सामग्री वाम पट्टी और यूआरएल

Uri navigateUri = new Uri(System.Web.HttpContext.Current.Request.Url, relativeDocumentPath); 
संबंधित मुद्दे