2015-11-25 6 views
10

का उपयोग कर अपलोड करें मैं एफ़टीपी के माध्यम से सर्वर पर फ़ाइलों को अपलोड करने की कोशिश कर रहा हूं। Apple Documentation के अनुसार NSURL सत्र वर्ग एफ़टीपी संचालन का समर्थन करता है।आईएसओ एफ़टीपी अपलोड NSRLSession

एक प्रसिद्ध Apple Developer blog है जो इसका भी समर्थन करता है। लेकिन फिर भी यह स्पष्ट नहीं है कि NSRLSession API का समर्थन ftp अपलोड करता है या नहीं? (मैंने सुझाए गए तरीके से त्रुटि और त्रुटि प्राप्त करने की कोशिश की)।

CFFTPStreamRef के पारंपरिक तरीके से, ftp अपलोड ठीक काम करता है लेकिन इसे 9.0 में बहिष्कृत किया गया है। हैडर का कहना है: CF_DEPRECATED (10_3, 10_11, 2_0, 9_0, "NSURLSessionAPI उपयोग एफ़टीपी अनुरोधों के लिए")

किसी भी विचार है, उदाहरण के या के साथ मदद करने के लिए लिंक। मैं अब के लिए कुछ इस तरह कोशिश कर रहा हूँ:

NSURL *url_upload = [NSURL URLWithString:@"ftp://username:[email protected]/myfolder/filename.zip"]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url_upload]; 
    [request setHTTPMethod:@"PUT"]; 
NSURL *docsDirURL = [NSURL fileURLWithPath:filePath]; 

NSURLProtectionSpace * protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:url_upload.host port:[url_upload.port integerValue] protocol:url_upload.scheme realm:nil authenticationMethod:nil]; 

NSURLCredential *cred = [NSURLCredential 
         credentialWithUser:userId 
         password:password 
         persistence:NSURLCredentialPersistenceForSession]; 


NSURLCredentialStorage * cred_storage ; 
[cred_storage setCredential:cred forProtectionSpace:protectionSpace]; 
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; 
sessionConfig.URLCredentialStorage = cred_storage; 
sessionConfig.timeoutIntervalForRequest = 30.0; 
sessionConfig.timeoutIntervalForResource = 60.0; 
sessionConfig.allowsCellularAccess = YES; 
sessionConfig.HTTPMaximumConnectionsPerHost = 1; 
NSURLSession *upLoadSession = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil]; 
NSURLSessionUploadTask *uploadTask = [upLoadSession uploadTaskWithRequest:request fromFile:docsDirURL]; 
[uploadTask resume]; 

उत्तर

4
मेरी याद, NSURLSession (और NSURLConnection) का सबसे अच्छा करने के लिए

समर्थन FTP के माध्यम से फ़ाइलों को पुन: प्राप्त करने, लेकिन इस तरह के रूप में STOR (ध्यान दें कि PUT किसी अन्य एफ़टीपी आदेश, का समर्थन नहीं करते एक HTTP विधि है, एक एफ़टीपी विधि नहीं)।

अपने उद्देश्यों के लिए, आपके विकल्प या तो CFFTPStream API (जो केवल मुश्किल से काम करता है) या FTP का उपयोग बंद करना है।

मेरी मजबूत सिफारिश एफ़टीपी का उपयोग करना बंद करना होगा। एफ़टीपी प्रोटोकॉल निराशाजनक रूप से असुरक्षित है, वायरस पर क्लीयरक्स्ट फॉर्म में उपयोगकर्ता नाम और पासवर्ड भेज रहा है, जो लोगों के लिए क्रेडेंशियल और मास्कराइड को स्नीफ करना वास्तव में आसान बनाता है। तो एकमात्र ऐसी स्थिति जहां एक एफ़टीपी अपलोड भी दूरस्थ रूप से स्वीकार्य होगा, इन दिनों एक साझा ड्रॉपबॉक्स में एक अज्ञात एफ़टीपी अपलोड है, और फिर भी, यह कुछ हद तक संदिग्ध है। यही कारण है कि कार्यक्षमता NSRLConnection API में कभी नहीं जोड़ा गया था, बहुत कम NSURL सत्र।

बहुत बेहतर विकल्प हैं जो एचटीटीपीएस पर वेबएडीवी, एचटीटीपीएस पर वेब अनुरोध, वेबएडीवी या पीओएसटी अनुरोधों को पाचन प्रमाणीकरण आदि के साथ अपलोड करते हैं। और वे विकल्प वास्तव में NSURL सत्र के साथ सहायक हैं और अन्य फायदे प्रदान करते हैं डाउनलोड फिर से शुरू करने की क्षमता। जब तक आपके पास सर्वर पक्ष को बदलने का बिल्कुल कोई तरीका नहीं है, तो कृपया इसके बजाय उन विकल्पों में से एक का उपयोग करें।

+1

NSURL सत्र दस्तावेज वास्तव में यह समझने में भ्रमित है कि यह एफ़टीपी पर क्या और कैसे समर्थन करता है। यह ऐप्पल से बहुत अच्छे दस्तावेज़ों का एक अच्छा उदाहरण नहीं है। – Amit

+1

यह दुर्भाग्यपूर्ण है कि किसी को कोर फाउंडेशन एफ़टीपी एपीआई के लिए बहिष्करण चेतावनी जोड़ने का उज्ज्वल विचार मिला, जिसका अर्थ है कि आप उन्हें NSURL सत्र के साथ बदल सकते हैं। यह एक गंभीर गलती थी। दस्तावेज़ों की रक्षा में, हालांकि, मुझे संदेह है कि किसी ने भी इस संभावना को माना है कि कोई भी अभी भी * अपलोड * फ़ाइलों को एफ़टीपी के साथ करने की कोशिश कर रहा है। इसे बीस साल पहले * बहुत बुरा सुरक्षा अभ्यास माना जाता था, इसलिए मुझे आश्चर्य नहीं होगा अगर ऐप्पल ने पूरी तरह से दूर-दूर के भविष्य में एफ़टीपी अपलोड के लिए समर्थन हटा दिया, क्योंकि यह कभी नहीं किया जाना चाहिए। – dgatwood

+0

मुझे एफ़टीपी बैशिंग का थोड़ा बीमार हो रहा है कि कोडर शामिल हो रहे हैं। सुरक्षा समस्या एक लाल हेरिंग है - टीएलएस पर एफ़टीपी का उपयोग करें !!! और इसे कचरे में कसने के लिए कोई अच्छा कारण नहीं है ... उदाहरण के लिए, अधिकांश वेब होस्ट अभी भी साइट सामग्री अपलोड करने के लिए एफ़टीपी सुविधाएं प्रदान करते हैं। अगर हम काम करना बंद कर देंगे तो हम कहाँ होंगे, आह? –