IOS - Image Upload Using ImageShack JSON API

I am trying to upload an image to ImageShack using the API :

- (void)uploadImage2:(UIImage *)image { NSData *imageToUpload = UIImagePNGRepresentation(image); if (imageToUpload) { NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; [parameters setObject:@"XXXX" forKey:@"key"]; [parameters setObject:@"json" forKey:@"format"]; //[parameters setObject:@"application/json" forKey:@"Content-Type"]; AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"https://post.imageshack.us"]]; NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"/upload_api.php" parameters:parameters constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { [formData appendPartWithFileData: imageToUpload name:@"image" fileName:@"logo.png" mimeType:@"image/png"]; }]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSDictionary *jsons = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil]; NSLog(@"response: %@",jsons); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if([operation.response statusCode] == 403) { //NSLog(@"Upload Failed"); return; } //NSLog(@"error: %@", [operation error]); }]; [operation start]; } } 

In response, I return an error message without explanation of the errors:

 { "error_code" = "upload_failed"; "error_message" = "Upload failed"; status = 0; } 

Can anyone help me with this? What is the right way to do this?

+6
source share
3 answers

Ok, I managed to solve my problem. All parameters should be set in the form of a body, and not as query values. It looks pretty simple:

  NSData *imageToUpload = UIImagePNGRepresentation([UIImage imageNamed:@"logo.png"]); if (imageToUpload) { NSString *urlString = @"https://post.imageshack.us"; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:urlString]]; NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/upload_api.php" parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { [formData appendPartWithFileData:imageToUpload name:@"fileupload" fileName:@"image" mimeType:@"image/png"]; [formData appendPartWithFormData:[@"XXXXXX" dataUsingEncoding:NSUTF8StringEncoding] name:@"key"]; [formData appendPartWithFormData:[@"json" dataUsingEncoding:NSUTF8StringEncoding] name:@"format"]; }]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSDictionary *jsons = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil]; NSLog(@"response: %@",jsons); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if([operation.response statusCode] == 403) { NSLog(@"Upload Failed"); return; } NSLog(@"error: %@", [operation error]); }]; [httpClient enqueueHTTPRequestOperation:operation]; }} 

Hope this helps someone!

+3
source

Try this and let us know if it works:

  NSData *imageToUpload = UIImageJPEGRepresentation(uploadedImgView.image,1.0);//(uploadedImgView.image); if (imageToUpload) { NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; [parameters setObject:@"MY API KEY" forKey:@"key"]; [parameters setObject:@"json" forKey:@"format"]; AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"https://post.imageshack.us"]]; NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"/upload_api.php" parameters:parameters constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { [formData appendPartWithFileData: imageToUpload name:@"image" fileName:@"temp.jpeg" mimeType:@"image/jpeg"]; }]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSDictionary *jsons = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil]; //NSLog(@"response: %@",jsons); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if([operation.response statusCode] == 403) { //NSLog(@"Upload Failed"); return; } //NSLog(@"error: %@", [operation error]); }]; [operation start]; } 
+2
source

Download Image (Basic)

  Endpoint : https://post.imageshack.us/upload_api.php Parameters : * key : The api key for your application; found in email sent after filling out our API Key Request form * fileupload : image file * format : json tags : a CSV list of tags to describe your picture public : A string setting your image to public or private where "yes" is public and "no" is private. Images are public by default. 

Did you use a key request and get your own key for the download process?

 Obtaining an API Key To obtain an API key, please use our API Key Request form. 

Also set application/json format

+1
source

Source: https://habr.com/ru/post/946160/