【发布时间】:2014-04-21 18:06:23
【问题描述】:
我正在编写一个 Web 应用程序和一个 OS X 应用程序,它们会将文件上传到服务器。
网络应用程序使用FlowJS 处理将文件发送到服务器。随着每个请求,它会发送块编号、块大小、总文件大小、文件名等。这很棒,因为在幕后我将此数据上传到 S3 并使用它确定文件何时完成上传的信息。此外,由于数据以块的形式出现,我不必将整个文件存储在服务器的内存中。
对于目标 c 的 OS X,我计划使用 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 中包含该信息。
【问题讨论】:
-
你看过这个:github.com/AFNetworking/AFNetworking/issues/1398 吗?看起来你可以使用
uploadTaskWithRequest:fromFile:progress:completionHandler: -
@jacobhyphenated 虽然它不会将进度附加到请求中吗?
标签: objective-c networking file-upload afnetworking multipartform-data