如何使用POST与AFNetworking将图像作为参数(param)发送

时间:2016-06-15 09:57:58

标签: ios objective-c afnetworking

我需要像

一样发送图像
URl : some API 

params : {profileImage:string(file)}

仅在参数列表中表示我必须将图像文件作为字符串发送。

我使用了以下代码。但它不起作用。

NSData *dataImage = [[NSData alloc] init];
dataImage = UIImagePNGRepresentation(selectedImage);

NSString *stringImage = [dataImage base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

NSDictionary *params = {profileImage : stringImage}
NSString *url = [NetworkRoutes postProfileImageAPIWithMobileNumber:[PTUserDetails getMobileNumber]];

self.operationManager = [AFHTTPSessionManager manager];
self.operationManager.responseSerializer = [AFJSONResponseSerializer serializer]; //
[self.operationManager.requestSerializer setAuthorizationHeaderFieldWithUsername:@“userName” password:@“some password”];

[self.operationManager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {

    NSError *error;
    if (![formData appendPartWithFileURL:[NSURL fileURLWithPath:path] name:@"file" fileName:[path lastPathComponent] mimeType:@"image/jpg" error:&error]) {
        NSLog(@"error appending part: %@", error);
    }
} progress:^(NSProgress * _Nonnull uploadProgress) {

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

}];

你的回答不需要在afnetworking,也可以在nsurlconnection

我得到了resposne  { 回复:“请上传图片文件” }

OR

建议我在附加的屏幕截图中如何做。在帖子中,我得到了回复enter image description here

3 个答案:

答案 0 :(得分:3)

 NSData *imgData = UIImageJPEGRepresentation(image, 1.0);
    NSUInteger fileSize = [imgData length];
    if(fileSize>400000)
    {
        float size = (float)((float)400000/(float)fileSize);
        imgData = [NSData dataWithData:UIImageJPEGRepresentation(image,    size)];
    }

    NSString *imgProfilePic = [imgData base64Encoding];
    and then you can send this imgProfilePic to Webservice 

答案 1 :(得分:0)

如果您以多部分发送图像,那么这可能比BASE64

更有帮助,最简单

也无需将图像转换为BASE64字符串。

- (void)uploadImage:(UIImage*)image withParams:(NSDictionary*)paramsDict withURL:(NSString *)URL
{

NSData *imageData =  UIImageJPEGRepresentation(image, 1.0);
AFHTTPRequestOperationManager *manager = 

[AFHTTPRequestOperationManager manager];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];

[manager POST:URL parameters:paramsDict constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

        if (imageData!=nil) {
            [formData appendPartWithFileData:imageData name:@"imagename" fileName:@"filename" mimeType:@"image/jpeg"];
        }

    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"success = %@", responseObject);
        [appDelegate dismissLoading];
        if ([[responseObject valueForKey:@"code"] isEqualToString:@"200"])
        {
            // code after success
        }

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        [appDelegate dismissLoading];
        NSLog(@"error = %@", error);
    }];
}

答案 2 :(得分:0)

尝试发送如下(下面之一)的方式:

<强> 1

     -(void)uploadimage{
            AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://your server.url"]];

            NSData *imageData = UIImageJPEGRepresentation(self.avatarView.image, 0.5);

// if you want to pass another parameter with image then 

        NSDictionary *param = @{@"username": self.username, @"password" : self.password};


            AFHTTPRequestOperation *operation = [manager POST:@"rest.of.url" parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
                //do not put image inside parameters dictionary, but append it!
                [formData appendPartWithFileData:imageData name:paramNameForImage fileName:@"photo.jpg" mimeType:@"image/jpeg"];

            } success:^(AFHTTPRequestOperation *operation, id responseObject) {
                NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);

            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

     NSLog(@"Error: %@ ***** %@", operation.responseString, error);

     }];
            [operation start];
        }

<强> 2

 UIImage *image = [UIImage imageNamed:@"imageName.png"];
NSData *imageData = UIImageJPEGRepresentation(image,1);


NSString *queryStringss = [NSString stringWithFormat:@"http://your server/uploadfile/"];
queryStringss = [queryStringss stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];


[manager POST:queryStringss parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
 {


     [formData appendPartWithFileData:imageData name:@"fileName" fileName:@"imageName.png" mimeType:@"image/jpeg"];



 }
      success:^(AFHTTPRequestOperation *operation, id responseObject)
 {



    NSDictionary *dict = [responseObject objectForKey:@"Result"];

    NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);


 }
      failure:^(AFHTTPRequestOperation *operation, NSError *error)
 {

     NSLog(@"Error: %@ ***** %@", operation.responseString, error);
 }];