1

私はios webservicesに慣れていないので、過去2〜3日間問題に悩まされています。画像やjsonなどの複数の部分を持つサーバーにリクエストを送信する必要があり、マルチパート/フォームデータを使用しようとしましたリクエストを送信しましたが、何らかの理由でサーバーがリクエストを取得できませんでした。誰かこの問題を解決するのを手伝ってくれますか

私が使用しているコードは

NSData *imageData = UIImagePNGRepresentation(img);

   NSMutableURLRequest *theRequest =[NSMutableURLRequest requestWithURL:theURL];

    NSString *boundary = [NSString stringWithFormat:@"---------------------------14737809831466499882746641449"];

 NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];

    [theRequest addValue:contentType forHTTPHeaderField:@"Content-Type"];
[theRequest setHTTPMethod:@"POST"];


 NSMutableString *theBody = [[NSMutableString alloc]init];

    [theBody appendString:[NSString stringWithFormat:@"\r\n--%@\r\n", boundary]];

     [theBody appendString:[NSString stringWithFormat:@"Content-Type: application/json\r\n\r\n"]];

//append The Json string

[theBody appendString:myJsonString];

[theBody appendString:[NSString stringWithFormat:@"%@", boundary]]; 

//this appends the image

[theBody appendString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"data\"; filename=\"photo\""]];

[theBody appendString:[NSString stringWithFormat:@"Content-Type: image/png\r\n\r\n"]];

[theBody appendString:[NSString stringWithFormat:@"%@",imageData]];

[theBody appendString:[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] ];

[theRequest setHTTPBody:[theBody dataUsingEncoding:NSUTF8StringEncoding]];
4

2 に答える 2

0

したがって、基本的には、 内で画像を送信しているときに問題に直面していることがわかりますJSON

この場合、最初にできることは、画像を分解し、そのデータの後にエンコーダースキームNSDataが必要になることです。Base64

[Base64 encode:(NSData)data]

これで、必要な構造に格納できます。たとえば、辞書に格納する必要がある場合は、次のように同じことを実現できます。

NSMutableDictionary* dict = [NSMutableDictionary new];
[dict setObject:[Base64 encode:data] forKey:@"imageBytes"]; // I did in single step but if you need you can do two steps...

ここで、先ほど使用したJSONように を使用します。

どんな懸念でも、私に知らせてください。:)

于 2012-11-29T06:14:58.083 に答える
0

NSMutableURLRequest を直接使うと複雑に感じましたが、「ASIFormDataRequest」を使ってみてください、使いやすいです。また、レスポンスのキャッシュ、リクエストのキャンセルなど、他にも多くの機能があります。ドキュメントはこちらです。

于 2012-11-29T06:08:19.333 に答える