Mô tả: Tôi cần gửi chuỗi mã hóa cơ sở 64 trong thông số HTTP POST đại diện cho tệp được tải lên.Tải lên Base64 lớn trong iOS
phương pháp hiện tại: Tôi đang sử dụng một ASIFormDataRequest và mã hóa tập tin của tôi vào một chuỗi base64 như vậy:
NSData *data = [[NSFileManager defaultManager] contentsAtPath:@"my path here"];
NSString *base64Data = [data encodeBase64ForData];
Tuy nhiên khi tải lên tập tin lớn App chạy ra khỏi bộ nhớ và chết một cái chết khủng khiếp!
Đề xuất giải pháp: Hiện tại, tôi đọc tập tin từ đĩa, chuyển đổi thành chuỗi base64 thành các khối và gắn chuỗi base64 đã chuyển đổi vào tham số trong yêu cầu HTTP?
Cách hiệu quả để tránh đọc toàn bộ tệp vào bộ nhớ.
Bất kỳ đầu vào nào sẽ được đánh giá rất nhiều!
http tôi đang yêu cầu đầy đủ:
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:)];
Tôi chưa bao giờ nhìn thấy một bộ chuyển đổi Base64 chunking, nhưng nó không phải là quá khó để thực hiện một mã nguồn mở thực hiện và biến nó thành một chunking một. Base64 không * phức tạp *. –
Bạn cũng có quyền kiểm soát máy chủ web không? Có nghĩa là bạn có thể sửa đổi mã ở đó? Và khi bạn nói tập tin lớn? Lớn thế nào? 100 MB? 500 MB? 1 GB? –
Hiện tại, video tải lên bị giới hạn ở 100MB, mặc dù điều này có thể tăng trong tương lai. Lý tưởng nhất là giải pháp nên hoạt động không phân biệt kích thước của quá trình tải lên, vì tôi chắc chắn mã này sẽ được sử dụng trong nhiều dự án khác. Tôi đang xem luồng tại thời điểm này ... –