2011-12-15 9 views
7

से मैं ftp://ftp.remoteServer.comसी # निरपेक्ष यूआरआई को हटा ".." यूआरएल

RemoteServer पर मेरे रूट निर्देशिका एक "अपलोड" और एक "डाउनलोड" फ़ोल्डर में शामिल करने के लिए FTP के माध्यम से एक फ़ाइल अपलोड करने की है। मुझे अपनी फाइल को "अपलोड" निर्देशिका में रखना होगा। लेकिन लॉग इन पर, सर्वर स्वचालित रूप से मुझे "डाउनलोड" फ़ोल्डर में डालता है।

string serverTarget = "ftp://ftp.remoteServer.com/"; 
serverTarget += "../upload/myfile.txt"; 
Uri target = new Uri(serverTarget); 
FTPWebRequest ftp = (FTPWebRequest)FtpWebRequest.Create(target); 

using(Stream requestStream = ftp.GetRequestStream()) { 
    // Do upload here 
} 

इस कोड के साथ विफल:

मैं यह कर की कोशिश की (550) अनुपलब्ध (जैसे, फ़ाइल नहीं मिला, पहुँच नहीं) फ़ाइल मैं कोड डिबग, और बदले की target.AbsoluteUri रिटर्न ftp://ftp.remoteServer.com/upload रूप ftp://ftp.remoteServer.com/../upload (गायब ..)

यदि मैं ब्राउज़र में ftp://ftp.remoteServer.com/../upload डालता हूं, तो मैं लॉग इन कर सकता हूं और सत्यापित कर सकता हूं कि यह सही जगह है जहां मैं अपनी फाइल रखना चाहता हूं।

मैं सही जगह पर जाने के लिए FTPWebRequest कैसे प्राप्त कर सकता हूं?

+0

किया था। – ApolloSoftware

+0

verbatim स्ट्रिंग शाब्दिक ... – ApolloSoftware

+1

@LostInCode अनिवार्य रूप से आप पूछ रहे हैं कि क्यों ftp.ftoteServer.com/../upload/myfile.txt को ftp.remoteServer.com/upload/ के रूप में प्रदर्शित किया जा रहा है myFile.txt? मेरा अनुमान है कि/अपलोड पहले से ही आपकी साइट की जड़ पर है और वह ../upload अनावश्यक के रूप में देखा जाता है। –

उत्तर

2

मेरा मानना ​​है कि आप अपने यूआरआई में डॉट्स रखने के लिए डॉट्स को% 2E के रूप में एन्कोड कर सकते हैं।

तो कुछ की तरह: आप भाव के लिए @ "नियमित के बजाय" कोशिश

string serverTarget = "ftp://ftp.remoteServer.com/%2E%2E/upload/myfile.txt"; 
+0

यह चाल है! एक बार जब मुझे पता चले कि क्या देखना है, तो मुझे इस पर पिछली एसओ प्रविष्टि भी मिली: http://stackoverflow.com/questions/480619/why-doesnt-ftpwebrequest-or-webrequest-in-general-accept-a-path –

+0

एफ़टीपी के लिए प्रत्येक यूरी भाग का निर्माण Uri.EscapeDataString (fileOrFolderName) का उपयोग करके किया जा सकता है, सभी गैर उरी संगत चरित्र (रिक्त स्थान, यूनिकोड ...): –

+0

उदाहरण के लिए फ़ाइल नाम में किसी भी वर्ण को अनुमति देने के लिए, req = (FtpWebRequest) WebRequest.Create (नया उरी (पथ + "/" + उरी.इस्केपडाटास्ट्रिंग (फ़ाइल नाम))); –

1

इस प्रयास करें:

string serverTarget = "../upload/myfile.txt"; 
Uri uri = new Uri(serverTarget, UriKind.Relative); 
1

एंडी इवांस 'टिप्पणी सही है।

यूआरआई पर विचार करें: http://ftp.myserver.com/../.. का अर्थ है, "मुझे इस निर्देशिका के माता-पिता के पास ले जाएं"। लेकिन वहां कोई अभिभावक नहीं है! तो जब आप पूर्ण यूआरएल प्राप्त करते हैं, तो आप http://ftp.myserver.com/ के साथ समाप्त होने जा रहे हैं और कुछ भी नहीं है जो पार्सर कर सकता है।

मुझे लगता है कि समस्या आपके FTP सर्वर की कॉन्फ़िगरेशन के साथ है। मुझे लगता है कि निर्देशिका संरचना तरह दिखता है:

ftproot 
    upload 
    download 

यह FTP सेवा की तरह दिखता है स्वचालित रूप से /ftproot/download लिए आपको लॉग इन कर रहा है। यही है, स्थानीय फ़ाइल सिस्टम पर URI ftp.myserver.com/ftproot/download पर मैप किया गया है। यदि ऐसा है, तो यूआरआई के साथ झुकाव की कोई भी राशि आपको कहीं भी नहीं ले जा रही है। यदि यूआरआई रूट डाउनलोड निर्देशिका में मैप किया गया है, तो .. सिंटैक्स का उपयोग करके आप कोई भी तरीका नहीं कर सकते हैं, "एक स्तर ऊपर जाएं और फिर नीचे जाएं।"

क्या आप एक एफ़टीपी क्लाइंट जैसे फाइलज़िला, या शायद विंडोज एफ़टीपी कमांड लाइन टूल का उपयोग कर अपलोड करने में सक्षम हैं? यदि हां, तो आप इसे करने के लिए क्या कदम उठा रहे हैं? क्या आप अपना कोड वही कर सकते हैं?

संबंधित मुद्दे