Я пишу веб-приложение и приложение OS X, которое будет загружать файлы на сервер.Отправить файл в кусках с метаданными
Веб-приложение использует FlowJS для обработки отправки файлов на сервер. Наряду с каждым запросом он отправляет номер фрагмента , размер блока, общий размер файла, имя файла, и т. Д. Это здорово, потому что за кулисами я загружаю эти данные в S3, и я использую эту информацию, чтобы определить, когда файл завершает загрузку. Кроме того, поскольку данные поступают в куски, мне не нужно хранить весь файл в памяти на моем сервере.
Для OS X с объективом c, я планирую использовать AFNetworking. Я попытался с помощью многослойных загрузок:
-(void)uploadFileWithUrl:(NSURL*)filePath {
AFHTTPRequestOperationManager*manager = [AFHTTPRequestOperationManager manager];
[manager POST:@"http://www.example.com/files/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileURL:filePath name:@"blob" error:nil];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
, но это просто пытается отправить весь файл в одном запросе, который не является приемлемым, поскольку сервер будет работать из памяти на больших запросах.
Что бы я хотел знать, если есть что-то вроде FlowJS для объектива C, или если есть какой-то способ включить эту информацию в AFNetworking для каждого вызова.
Вы видели это: https://github.com/AFNetworking/AFNetworking/issues/1398? Похоже, вы могли бы использовать 'uploadTaskWithRequest: fromFile: progress: completeHandler:' – jacobhyphenated
@jacobhyphenated Это не добавляет прогресса в запрос, хотя это делает? – eliot