Reputation: 3798
I am using DropBox core api OAuth 2.0 authentication and I am trying to upload UIImage via it's core api
https://api-content.dropbox.com/1/files//
found at https://www.dropbox.com/developers/core/docs ( /files (POST) )
my code is
-(void)uploadData:(NSData *)imageAsData and:(NSString *)fileName{
NSString *urlString=[NSString stringWithFormat:@"https://api-content.dropbox.com/1/files/dropbox/Apps?access_token=%@",dropBoxToken];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"attachement\"; filename=\"%@\";",fileName] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageAsData]];
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"returnString=%@",returnString);
where imageAsData in NSData of a image and fileName is "abc.jpg".
output of returnString is {"error": "file parameter value 'None' is invalid"}
I don't know why this problem occurs please help me.
Upvotes: 0
Views: 409
Reputation: 60133
Please, save yourself a lot of trouble and use the far simpler files_put
endpoint instead. (There's a reason it's recommended in the documentation.)
Rough editing of your code (untested):
-(void)uploadData:(NSData *)imageAsData and:(NSString *)filePath {
NSString *urlString=[NSString stringWithFormat:
@"https://api-content.dropbox.com/1/files_put/dropbox/%@?access_token=%@",
filePath, dropBoxToken];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"PUT"];
[request setHTTPBody:imageAsData];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"returnString=%@",returnString);
}
Upvotes: 1