描述: 我需要在表示要上載的文件的HTTP POST參數發送底座64編碼的字符串。大的Base64上傳
電流法:我使用ASIFormDataRequest和編碼我的文件爲Base64字符串,像這樣:
NSData *data = [[NSFileManager defaultManager] contentsAtPath:@"my path here"];
NSString *base64Data = [data encodeBase64ForData];
但是上傳大文件時,應用程序運行的內存並且死一個可怕的死亡!
建議的解決方案:現在是否有人會從磁盤讀取文件,將其轉換爲base64字符串並將轉換後的base64字符串附加到HTTP請求中的參數?
有效地避免將整個文件讀入內存的任何方式。
任何輸入將不勝感激!在全
我的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:)];
我從來沒有見過一個分塊的Base64轉換器,但採用開源實現並將其轉換爲分塊轉換應該不會太難。 Base64並不那麼複雜。 –
您是否也控制了Web服務器?意思是你可以修改那裏的代碼嗎?而當你說大文件?多大? 100 MB? 500 MB? 1 GB? –
目前,上傳數量限制爲100MB,但未來可能會增加。理想情況下,解決方案應該與上傳的大小無關,因爲我確信這些代碼將用於更多的項目。目前我正在查看流... –