विवरण: मुझे HTTP पोस्ट पैरामीटर में बेस 64 एन्कोडेड स्ट्रिंग भेजने की आवश्यकता है जो अपलोड करने के लिए फ़ाइल का प्रतिनिधित्व करता है।आईओएस
वर्तमान विधि: मैं एक ASIFormDataRequest उपयोग कर रहा हूँ और इतने की तरह एक बेस 64 स्ट्रिंग में मेरी फाइल एन्कोडिंग:
NSData *data = [[NSFileManager defaultManager] contentsAtPath:@"my path here"];
NSString *base64Data = [data encodeBase64ForData];
लेकिन जब बड़ी फ़ाइलों को अपलोड करने के अनुप्रयोग स्मृति खत्म हो जाता है और एक भयंकर मौत मर जाता है!
प्रस्तावित समाधान: मैं कैसे के बारे में कहते हैं, जाना होगा, डिस्क से फ़ाइल को पढ़ने, यह HTTP अनुरोध में एक पैरामीटर के लिए मात्रा में बेस 64 तार को बदलने और परिवर्तित base64 स्ट्रिंग संलग्न अब किसी को भी करता है?
प्रभावशाली ढंग से किसी भी तरह से जो पूरी फ़ाइल को स्मृति में पढ़ने से बचाता है।
किसी भी इनपुट की सराहना की जाएगी!
मेरे http पूर्ण में अनुरोध कोड:
NSURL *url = [NSURL URLWithString:requestProgressURLString];
NSData *data = [[NSFileManager defaultManager] contentsAtPath:evidence.uri];
NSString *base64Data = [data encodeBase64ForData];
NSURL *fileURL = [[NSURL alloc] initWithString:evidence.uri];
request = [ASIFormDataRequest requestWithURL:url];
request.shouldAttemptPersistentConnection = false;
[request setShowAccurateProgress:YES];
[request setPostValue:accessToken forKey:@"AccessToken"];
[request setPostValue:[[fileURL path] lastPathComponent] forKey:@"Filename"];
[request setPostValue:evidence.name forKey:@"Title"];
[request setPostValue:base64Data forKey:@"FileData"]; //wants string value (base64 encoded)
[request addRequestHeader:@"Content-Type" value:@"application/x-www-form-urlencoded"];
[request setTimeOutSeconds:60];
[request setUploadProgressDelegate:self];
[request setDownloadProgressDelegate:self];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestDone:)];
[request setDidFailSelector:@selector(requestWentWrong:)];
मैंने कभी भी एक क्रंकिंग बेस 64 कनवर्टर नहीं देखा है, लेकिन इसे ओपन सोर्स कार्यान्वयन लेने और इसे एक चंकने वाले में बदलने में बहुत मुश्किल नहीं होनी चाहिए। बेस 64 * वह * जटिल नहीं है। –
क्या आपके पास वेब सर्वर का नियंत्रण भी है? मतलब क्या आप कोड को भी संशोधित कर सकते हैं? और जब आप बड़ी फाइल कहते हैं? कितना बड़ा? 100 एमबी? 500 एमबी? 1 जीबी? –
फिलहाल अपलोड 100 एमबी तक सीमित हैं, हालांकि भविष्य में यह बढ़ सकता है। आदर्श रूप से समाधान अपलोड के आकार के बावजूद काम करना चाहिए, क्योंकि मुझे यकीन है कि यह कोड कई और परियोजनाओं में उपयोग किया जाएगा। मैं इस समय धाराओं पर एक नज़र डाल रहा हूं ... –