Upload multiple images using AFNetworking

前端 未结 5 958
别跟我提以往
别跟我提以往 2020-12-19 12:30

I used the PickerController and loaded a few images on to a NSMutableArray.

Now i need to upload all of these images at once. am using

相关标签:
5条回答
  • 2020-12-19 13:11
    -(void)uploadImages{
    
    // image.finalImage - is image itself
    // totalCount - Total number of images need to upload on server
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    NSDictionary *parameters = @{@"Key":@"Value",@"Key":@"Value"};
    [manager POST:serverURL parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:UIImagePNGRepresentation(image.finalImage) name:@"ImageName" fileName:[[Helper getRandomString:8] stringByAppendingString:@".png"] mimeType:@"image/png"];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:(NSData *)responseObject options:kNilOptions error:nil];
        _uploadCounter+=1;
        if(_uploadCounter<totalCount){
            [self uploadImages];
        }else {
            NSLog(@"Uploading all images done");
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error");
    }];
    

    }

    Try this, I have uploaded 10 images on server using this code and its successfully uploaded on sever.

    0 讨论(0)
  • 2020-12-19 13:18

    Common technique for turning a UIImage into NSData is with one of the following two methods.

    NSData *pngData = UIImagePNGRepresentation(myUIImage);
    CGFloat quality = 1.0; // ranges from 0 to 1, 0% to 100%
    NSData *jpgData = UIImageJPEGRepresentation(myUIImage, quality);
    

    This of course assumes you know which type your image is. But since you used a PickerController to fetch the images, then it should be fairly easy to determine this. You just pull out the value under the key UIImagePickerControllerReferenceURL and check the ext parameter. This comment shows it visually https://stackoverflow.com/a/11506499/1529638.

    0 讨论(0)
  • 2020-12-19 13:21
    UIImage *image1 = [UIImage imageNamed:@"about_app"];
    UIImage *image2 = [UIImage imageNamed:@"alter"];
    NSArray *array = @[image1,image2];
    NSMutableURLRequest *request = [[AFNetWorkSingleton shareInstance] multipartFormRequestWithMethod:@"POST" path:@"Mindex/getimg" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>formData){
    int i = 0;
    for(UIImage *eachImage in array)
    {
        NSData *imageData = UIImageJPEGRepresentation(eachImage,0.5);
        [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%d",i ] fileName:[NSString stringWithFormat:@"file%d.jpg",i ] mimeType:@"image/jpeg"];
        i++;
    }
    }];
    

    Try this.

    0 讨论(0)
  • 2020-12-19 13:28

    If you want to upload multiple images and you want to keep the parameter name same for all the images you do it as below :

    NSDictionary *parameters = @{@"user_key": @"*****"};
    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:queryStringss parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        NSError *error;
        [formData appendPartWithFileData:imageData name:@"photo_file[0]" fileName:@"Picture44.png" mimeType:@"image/png"];
        [formData appendPartWithFileData:imageData1 name:@"photo_file[1]" fileName:@"Picture45.png" mimeType:@"image/png"];
    } error:nil];
    

    In this way the files would be sent as array to the server.

    0 讨论(0)
  • 2020-12-19 13:28


    Alamofire is nice source/library for the same:

    Swift 4:

    Alamofire.upload(
        multipartFormData: { multipartFormData in
            multipartFormData.append(unicornImageURL, withName: "unicorn")
            multipartFormData.append(rainbowImageURL, withName: "rainbow")
        },
        to: "https://httpbin.org/post",
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.responseJSON { response in
                    debugPrint(response)
                }
            case .failure(let encodingError):
                print(encodingError)
            }
        }
    )
    
    0 讨论(0)
提交回复
热议问题