Flickr API iOS应用“POST尺寸过大!” [英] Flickr API iOS app "POST size too large!"
问题描述
我正在尝试使用API将iOS应用中的照片发送到Flickr。我已成功获得授权,并准备好令牌。我通过HTTP POST发送照片数据,并遵循格式指南。
http://www.flickr.com/services/api/upload.example.html
<但是我从API返回的回复是......
< err code =93msg = POST尺寸太大了!尝试更小的东西,mmkay? />
我读过它可能与边界有关。关于@samrowlands对这篇文章的评论,我加倍检查了一下。 http://www.flickr.com/groups/api/discuss/72157605534260892/
任何帮助都会很棒。谢谢!
UIImage * image = [UIImage imageNamed:@photo.jpg];
NSData * imageData = UIImageJPEGRepresentation(image,0.9);
NSMutableURLRequest * request = [[[NSMutableURLRequest alloc] init] autorelease];
[请求setURL:[NSURL URLWithString:@http://api.flickr.com/services/upload/]];
[请求setHTTPMethod:@POST];
NSString * boundary = [NSString stringWithString:@--------------------------- 7d44e178b0434];
[请求addValue:[NSString stringWithFormat:@multipart / form-data; boundary =%@,boundary] forHTTPHeaderField:@Content-Type:];
NSMutableData * body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@\\\\ n - %@ \\\\ n,border] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@Content-Disposition:form-data; name = \api_key \\\\\\\\ ndataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@%@ \\\\ n,apiKey] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@ - %@ \\\\ n,border] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@Content-Disposition:form-data; name = \auth_token\\\\\\\\ ndataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@%@ \\\\ n,apiToken] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@ - %@ \\\\ n,border] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@Content-Disposition:form-data; name = \api_sig \\\\\\\ ndataUsingEncoding:NSUTF8StringEncoding]];
NSString * uploadSig = [self md5HexDigest:[NSString stringWithFormat:@%@ api_key%@ auth_token%@,apiSecret,apiKey,apiToken]];
[body appendData:[[NSString stringWithFormat:@%@ \\\\ n,uploadSig] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@Content-Disposition:form-data; name = \photo \; filename = \photo.jpg \\\\\ n ] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@Content-Type:image / jpeg\r\\\
\r\ ndataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@\ r \ n - %@ - \\\\ n,border] dataUsingEncoding:NSUTF8StringEncoding]];
[请求setHTTPBody:body];
我通过对内容进行更改来实现此目的-Type(无冒号)并在sig之后和照片之前添加边界。感谢您的代码 - 希望这会有所帮助。
NSString * uploadSig = [[NSString stringWithFormat:@%@ api_key%@ auth_token %@,secret,api_key,auth_token] MD5];
NSMutableURLRequest * request = [[[NSMutableURLRequest alloc] init] autorelease];
NSString * url = [NSString stringWithFormat:@http://api.flickr.com/services/upload/];
[请求setURL:[NSURL URLWithString:url]];
[请求setHTTPMethod:@POST];
NSString * boundary = [NSString stringWithString:@--------------------------- 7d44e178b0434 ];
[请求addValue:[NSString stringWithFormat:@multipart / form-data; boundary =%@,boundary] forHTTPHeaderField:@Content-Type];
NSMutableData * body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@\\\\ n - %@ \\\\ n,border] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@Content-Disposition:form-data; name = \api_key\\\\\\\ ndataUsingEncoding:NSUTF8StringEncoding]] ;
[body appendData:[[NSString stringWithFormat:@%@ \\\\ n,api_key] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@ - %@ \\\\ n,border] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@Content-Disposition:form-data; name = \auth_token\\\\\\\\ ndataUsingEncoding:NSUTF8StringEncoding]] ;
[body appendData:[[NSString stringWithFormat:@%@ \\\\ n,auth_token] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@ - %@ \\\\ n,border] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@Content-Disposition:form-data; name = \api_sig \\\\\\\ ndataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@%@ \\\\ n,uploadSig] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@ - %@ \\\\ n,border] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@Content-Disposition:form-data; name = \photo \; filename = \photo.jpg \\\\\ n ] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@Content-Type:image / jpeg\r\\\
\r\ ndataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@\ r \ n - %@ - \\\\ n,border] dataUsingEncoding:NSUTF8StringEncoding]];
[请求setHTTPBody:body];
I am trying to send a photo from an iOS app to Flickr using the API. I have successfully got the authorisation working and have a token ready to use. I am sending the photo data over a HTTP POST and am following the formatting guide here.
http://www.flickr.com/services/api/upload.example.html
But the response I get back from the API is...
<err code="93" msg="POST size too large! Try something smaller, mmkay?" />
I have read that it may have something to do with the boundary's. I've doubled checked regarding @samrowlands comments on this post. http://www.flickr.com/groups/api/discuss/72157605534260892/
Any help would be great. Thanks!
UIImage *image = [UIImage imageNamed:@"photo.jpg"];
NSData *imageData = UIImageJPEGRepresentation(image, 0.9);
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"http://api.flickr.com/services/upload/"]];
[request setHTTPMethod:@"POST"];
NSString *boundary = [NSString stringWithString:@"---------------------------7d44e178b0434"];
[request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField: @"Content-Type:"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"api_key\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n", apiKey] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"auth_token\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n", apiToken] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"api_sig\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
NSString *uploadSig = [self md5HexDigest:[NSString stringWithFormat:@"%@api_key%@auth_token%@", apiSecret, apiKey, apiToken]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n", uploadSig] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"photo\"; filename=\"photo.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
I got this to work by making the change to Content-Type(no colon) and adding a boundary after the sig and before the photo. Thanks for the code - hope this helps.
NSString *uploadSig = [[NSString stringWithFormat:@"%@api_key%@auth_token%@", secret, api_key, auth_token] MD5];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
NSString *url = [NSString stringWithFormat:@"http://api.flickr.com/services/upload/"];
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];
NSString *boundary = [NSString stringWithString:@"---------------------------7d44e178b0434"];
[request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"api_key\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n", api_key] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"auth_token\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n", auth_token] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"api_sig\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n", uploadSig] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"photo\"; filename=\"photo.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
这篇关于Flickr API iOS应用“POST尺寸过大!”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!