Flickr API iOS应用“POST尺寸过大!” [英] Flickr API iOS app "POST size too large!"

查看:100
本文介绍了Flickr API iOS应用“POST尺寸过大!”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆