4

助けてくれてありがとう。私はjsonペイロードのみを受け取るWebサービスを使用しており、このサービスは写真を送信するためにセットアップされています。

だから私はjsonペイロードに画像を埋め込む適切な方法を見つけようとしています。これが私のアプローチです。

//convert image to nsdata
NSData *originalPhoto = UIImageJPEGRepresentation(self.photo.image,.9);
//convert the data to a base64 string using NSData+Base64 category extension (Matt Gallagher version)

NSString *base64photoString = [originalPhoto base64EncodedString];

//set the string in a NSDictionary
[info setValue:base64photoString forKey:@"data"];

//then pass it to AFNetworking using the httpClient

すべてが機能しているようで、jsonペイロードを取得します。注:bas64文字列は最終的にポスト本体に配置されます。

URIをデータの前に埋め込む必要がある場合、このアプローチを使用することを知っている人はいますか? "file": "data:image / jpg; base64、[base64 string]"-私はこれを試しましたが、取得できませんでしたWebサービスからの愛は、構文が間違っている可能性があります。

ただし、Webサービスはそれを好みません。

エンコードを確認するために、生成された文字列をnslogから切り取り、オンラインデコーダーのWebサイトに貼り付けて、元の画像を再作成しました。これにより、データが正しくエンコードされたように見えます。

Webサーバー管理者と話をすることができるようになるまでに数日かかるので、これが正しいアプローチであるかどうかの検証を探しているか、欠陥を指摘してください。サービスをマルチパートエンコード形式に変更することはできません。このアプローチに固執しています。

再度、感謝します

4

1 に答える 1

3

これを理解し、他の誰かが同様の問題を抱えている場合に備えて、私が答えを出すと思いました。

シナリオ-写真をbase64stringとして埋め込んだJSONペイロードを投稿します。

ここhttps://github.com/l4u/NSData-Base64.gitでbase64のフォークバージョンを見つけました 。Matt Gallagherが2009年頃に投稿した、base64EncodedStringWithSeparateLines:YESという元の作品からの追加のメソッドが含まれています。

//use it like this:
NSData *originalPhoto = UIImageJPEGRepresentation(self.photo.image,1);
NSString *base64PhotoString = [originalPhoto base64EncodedStringWithSeparateLines:YES]; 

//stuff it in a dictionary like this:
NSMutableDictionary *info = [NSMutableDictionary dictionary];
[info setValue:base64PhotoString forKey:@"sFileData"];

//send it using AFNetworking like this:
[[ClientInterface sharedInstance] postPath:submitPhoto parameters:info success:^(AFHTTPRequestOperation *operation, id responseObject) {

   NSLog(@"success!");

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    NSLog(@"Error:%@",error);

}];
于 2012-08-06T18:24:43.457 に答える