Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用AFN网络上传多个图像_Ios_Objective C_Swift_Xcode_Afnetworking - Fatal编程技术网

Ios 使用AFN网络上传多个图像

Ios 使用AFN网络上传多个图像,ios,objective-c,swift,xcode,afnetworking,Ios,Objective C,Swift,Xcode,Afnetworking,我使用了PickerController并将一些图像加载到NSMutableArray中 现在我需要一次上传所有这些图片。我正在使用AFNetworking,我该怎么做 我浏览了AFNetworking文档,其中有一个部分名为为多部分请求创建上传任务,进度为。但是,我无法上载我的NSMutableArray中的图像 ****注意:我想将NSMutableArray中的图像作为字节数组上传。我该怎么做**** 到目前为止我掌握的代码 NSURLSessionConfiguration *confi

我使用了
PickerController
并将一些图像加载到
NSMutableArray

现在我需要一次上传所有这些图片。我正在使用AFNetworking,我该怎么做

我浏览了
AFNetworking
文档,其中有一个部分名为
为多部分请求创建上传任务,进度为
。但是,我无法上载我的
NSMutableArray
中的图像

****注意:我想将
NSMutableArray
中的图像作为字节数组上传。我该怎么做****

到目前为止我掌握的代码

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"site.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

UIImage
转换为NSData的常用技术是使用以下两种方法之一

NSData *pngData = UIImagePNGRepresentation(myUIImage);
CGFloat quality = 1.0; // ranges from 0 to 1, 0% to 100%
NSData *jpgData = UIImageJPEGRepresentation(myUIImage, quality);
当然,这假设您知道图像的类型。但是,由于您使用了
PickerController
来获取图像,因此确定这一点应该相当容易。只需拉出键
UIImagePickerControllerReferenceURL
下的值,然后检查
ext
参数。此注释直观地显示了它。

UIImage*image1=[UIImage imagename:@“about_app”];
UIImage*image2=[UIImage ImageName:@“alter”];
NSArray*数组=@[image1,image2];
NSMutableURLRequest*request=[[AFNetWorkSingleton shareInstance]multipartFormRequestWithMethod:@“POST”路径:@“Mindex/getimg”参数:nil constructingBodyWithBlock:^(idformData){
int i=0;
用于(UIImage*阵列中的每个组件)
{
NSData*imageData=UIIMAGEJPEG表示法(每个图像,0.5);
[formData appendPartWithFileData:imageData名称:[NSString stringWithFormat:@“文件%d”,i]文件名:[NSString stringWithFormat:@“文件%d.jpg”,i]mimeType:@“图像/jpeg”];
i++;
}
}];
试试这个。

-(void)上传图像{
-(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");
}];
//image.finalImage-是图像本身 //totalCount-需要在服务器上上载的图像总数 AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManager]; manager.responseSerializer=[AFHTTPResponseSerializer序列化程序]; NSDictionary*参数=@{@“键”:@“值”,@“键”:@“值”}; [manager POST:serverURL参数:参数constructingBodyWithBlock:^(id formData){ [formData appendPartWithFileData:UIImagePNGRepresentation(image.finalImage)名称:@“ImageName”文件名:[[Helper getRandomString:8]stringByAppendingString:@.png”]mimeType:@“image/png”]; }成功:^(AFHTTPRequestOperation*操作,id响应对象){ NSDictionary*jsonResponse=[NSJSONSerialization JSONObject WithData:(NSData*)responseObject选项:kNilOptions错误:nil]; _上传计数器+=1;
如果(_uploadCounter如果要上载多个图像,并且要使所有图像的参数名称保持相同,请按如下操作:

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];
NSDictionary*参数=@{@“用户密钥”:@“*****”};
NSMutableURLRequest*request=[[AFHTTPRequestSerializer]multipartFormRequestWithMethod:@“POST”URLString:queryStringss参数:参数constructingBodyWithBlock:^(id formData){
n错误*错误;
[formData appendPartWithFileData:imageData名称:@“photo_文件[0]”文件名:@“Picture44.png”mimeType:@“image/png”];
[formData appendPartWithFileData:imageData1名称:@“photo_文件[1]”文件名:@“Picture45.png”mimeType:@“image/png”];
}错误:无];
通过这种方式,文件将以数组的形式发送到服务器。


同样适用于以下情况:

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)
        }
    }
)

你能将图像压缩并通过internet发送吗?多部分请求是一种很好的方法。唯一的技巧是如何获取所选图像的
NSData
。就个人而言,我建议不要
UIImagePNGRepresentation
UIImageJPEGresentation
并获取原始资产的实际字节(请参阅)。然后使用appendPartWithFileData:name:fileName:mimeType:error:
进行上载。显然,所有这些都假设您拥有一个设计用于解析多部分请求的web服务…我是否应该循环
[FrimDeaAppDebug FieldaTo... /Cudio>上传多个文件几次?是的,这是一个很好的解决方法。但是,顺便说一下,你可能想考虑一下你是否真的想要一个巨大的请求(因为如果你在有很多上传图像的巨大请求中失败了,你必须重新开始)。或者对每个图像单独请求。后者需要更复杂的设计,但可能更容错。但这取决于你。谢谢你的回答。但我如何使用AFNetworking上传它?我想发送字节数组。你应该发送什么类型的体?多部分表单数据?你不发送“字节数组”,本身。您发送
NSData
。请参阅。@Priya我认为Hardik的答案足够好。您可以仅在Obj-c中检查搜索特定方法。您使用哪个导入文件作为AFHTTPRequestOperationManager进行此操作@Urmi@HamzaImran嘿,我使用了AFNetworking框架。所以请检查这个框架,你必须导入“AFNetworking.h”文件。
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)
        }
    }
)