使用AFNetworking 2.0从iOS应用程序以流方式上载100张图像

使用AFNetworking 2.0从iOS应用程序以流方式上载100张图像,ios,xcode,ios8,image-uploading,afnetworking-2,Ios,Xcode,Ios8,Image Uploading,Afnetworking 2,我想在一次请求中最多向我的服务器发送100个图像。简单的图片上传对我来说很好 但是我想用AFNetworking 2.0 api创建一个数据流。所以,我想问我如何用我的图像数据创建一个新的工作流 此外,该流还应在应用程序的后台模式下工作&图像应在应用程序的后台模式下上传到服务器上。如何使用AFNetworking 2.0库实现这一点 任何建议都会有帮助。我认为这不是一个好主意,但我会回答你的问题,让你自己决定 AFAIK一次请求发送100张图像只有两种方式: 将它们绑定到单个文件中,例如zip文

我想在一次请求中最多向我的服务器发送100个图像。简单的图片上传对我来说很好

但是我想用AFNetworking 2.0 api创建一个数据流。所以,我想问我如何用我的图像数据创建一个新的工作流

此外,该流还应在应用程序的后台模式下工作&图像应在应用程序的后台模式下上传到服务器上。如何使用AFNetworking 2.0库实现这一点


任何建议都会有帮助。

我认为这不是一个好主意,但我会回答你的问题,让你自己决定

AFAIK一次请求发送100张图像只有两种方式:

  • 将它们绑定到单个文件中,例如zip文件
  • 使用多部分/表单数据
  • 第一种方法很明显:)让我们谈谈第二种方法

    使用AFNetworking创建多部分请求:

    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer]
                                        multipartFormRequestWithMethod:@"POST"
                                        URLString:[url absoluteString]
                                        parameters:nil
                                        constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
                                        {
                                            for (NSURL *imageUrl in imageURLsArray)
                                                [formData appendPartWithFileURL:imageUrl name:[imageUrl lastPathComponent] error:nil];
                                        }
                                        error:nil];
    

    如何在后台上传文件您可以在此处或此处找到例如

    @Nirmit,您可以使用多部分上传上传更多图像。请点击链接

    在上传一组图像时,您需要在您的端以及服务器端设置最大级别的超时限制。此外,您还需要提供后台运行支持。以防用户在后台模式下输入

    以多部分请求形式:

    您需要添加for循环图像,而不是单个图像。这里我添加了对多部分请求表单的修改

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSDictionary *parameters = @{@"foo": @"bar"};
    
    [manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    
    for(int i=0:i<1000:i++){
    
     NSURL *filePath = [NSURL fileURLWithPath:arrayImages[i]];
    
    [formData appendPartWithFileURL:filePath name:@"image" error:nil];
    
    }
    
    
    
    
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Success: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
    }];
    
    AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManager];
    NSDictionary*参数=@{@“foo”:@“bar”};
    [经理职务:@”http://example.com/resources.json“参数:参数constructingBodyWithBlock:^(id formData){
    
    对于(int i=0:i我建议不要单次请求上传100个图像,因为如果它失败,整个请求都会失败。我倾向于单独请求。单次请求可能有直观的吸引力,因为它更简单,但在网络中断的情况下,它会变得不那么优雅

    关于使用AFNetworking进行后台上传,请参阅,其中介绍了一些注意事项(使用
    AFHTTPSessionManager
    而不是
    AFHTTPRequestOperationManager
    ,编写必要的应用程序委托方法来捕获后台会话完成处理程序,以及无法使用特定于任务的完成块处理程序等)


    注意,您需要创建上载文件的上载任务。这意味着,如果您的web服务需要一个
    多部分/formdata
    请求,您应该将这些请求转移到一个文件中(请参阅Avt的回答)然后将其作为上传请求的文件参数提供。这不仅与后台会话兼容,而且具有最小的峰值内存使用率配置文件(我认为这是您关于希望基于流的请求的评论背后的意图).

    您不能将
    AFHTTPRequestOperationManager
    与后台会话结合使用。同样,您也不能将
    POST
    方法与后台会话结合使用。您好,Avt,如果我创建一个包含100个图像的zip文件,那么它的大小也将与100个图像相同。因此,这对我来说不是一种方便的方法。@NirmitDagly-zip图像是一种在一个请求中将100个图像作为单个文件发送的方法。它不会减少总大小这一事实在这里并不重要。正如您所看到的,我写了“将它们绑定到单个文件中,例如压缩它们”,所以这一点的主要思想是将图像绑定到单个文件中。
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSDictionary *parameters = @{@"foo": @"bar"};
    
    [manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    
    for(int i=0:i<1000:i++){
    
     NSURL *filePath = [NSURL fileURLWithPath:arrayImages[i]];
    
    [formData appendPartWithFileURL:filePath name:@"image" error:nil];
    
    }
    
    
    
    
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Success: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
    }];