AFNetworking:多个文件上传问题

Posted

技术标签:

【中文标题】AFNetworking:多个文件上传问题【英文标题】:AFNetworking: Issue with multiple files upload 【发布时间】:2012-08-09 11:14:39 【问题描述】:

我正在开发某个应用程序的某些部分。那部分是文件上传管理器。我已经实现了一个 UploadManager 类,它是一个继承自 NSObject 并具有方法的单例:

- (void)addNewUploadWithFileData:(NSData *)fileData
               withThumbnailData:(NSData *)thumbnailData
                      withUserId:(int32_t)userId
                        withType:(UploadType)uploadType
                   withMediaType:(MediaType)mediaType
                    withDelegate:(id<UploadDelegate>)delegate;

此方法创建新的上传对象。 Upload对象是继承自AFHTTPClient的BasicUpload类的子类之一。

所有这些实现的目的是允许上传多个文件、控制它们和其他功能。

在我添加多次上传同一个文件的情况下,一切正常,所有上传都同时上传。 但是在一个场景中,当我添加一些要上传的文件,然后添加一些其他较小的文件要上传时,这个较小的文件会被上传,而其他的则不会。

我检查了发生了什么,发现当我添加新的其他文件要上传时,会创建新的请求(显然),在创建之后,之前添加的所有其他上传对象都是释放(释放)。 它发生在 AFHTTPClient.m 中,在方法中:

- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method
                                                   path:(NSString *)path
                                             parameters:(NSDictionary *)parameters
                              constructingBodyWithBlock:(void (^)(id <AFMultipartFormData>formData))block

当它到达零件时:

__block AFMultipartFormData *formData = [[[AFMultipartFormData alloc] initWithURLRequest:request stringEncoding:self.stringEncoding] autorelease];

之后所有之前的上传对象(AFHTTPClient 的子类)都被释放。

我做错了什么???还是可能有什么bug???

【问题讨论】:

【参考方案1】:

您是否考虑将所有 AFRequestOperations 添加到 NSOperationQueue 以便保留它们?

【讨论】:

上传管理器单例具有属性 NSOperationQueue。创建的所有新上传对象都将他的操作添加到该操作队列中。 您是否尝试将maxConcurrentOperationCount 设置为 1 只是为了进行测试?我猜你正处于某种奇怪的操作僵局中。 我已经试过了。相同的故事。我认为问题不在于操作对象。因为它在创建新的 AFHTTPClient 对象后立即发生(在 __block AFMultipartFormData *formData = [[[AFMultipartFormData alloc] initWithURLRequest:request stringEncoding:self.stringEncoding] autorelease];)之后,在创建新的新操作对象之前。 等等,你为什么要重新创建客户端...?您只需要创建一个新的 AFRequestOperation,而不是每次都创建一个新客户端。 因为一些考虑,我每次都需要新的AFHTTPClient。

以上是关于AFNetworking:多个文件上传问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFNetworking 上传多个图像或文件,

afnetworking 多文件上传

iOS开发-AFNetworking参数和多文件同时上传多文件上传

无法使用 AFNetworking 3.0 上传图像

AFNetworking 文件上传

使用 AFNetworking 上传文件