NSMutableURLRequest を使用したポスト リクエストの一部として、base64 でエンコードされた画像をサーバーに送信しています。投稿本文として記録するものとサーバーが受け取るものは同じではありません。サーバーは、接続が途中で中止されたかのように、切り捨てられたバージョンを取得しているようです。以下のコードを参照してください。
NSString *dataStr = [NSString stringWithFormat:@"request_data=%@",reqStr];
NSLog(@"datastr is %@",dataStr);
NSData *dataForUrl = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"nsdata length is: %i",[dataForUrl length]);
[urlRequest setHTTPBody:dataForUrl];
[urlRequest setValue:[NSString stringWithFormat:@"%d", [dataForUrl length]] forHTTPHeaderField:@"Content-Length"];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *res, NSData *data, NSError *err) {
// ...
}
最初のログ ステートメントは、正しいデータを示しています。文字列の base64 部分をhttp://www.motobit.com/util/base64-decoder-encoder.aspに取り、jpg としてデコードしたところ、正しい画像になりました。2 番目のログ ステートメントは、長さが適切なサイズであることを示しています (たとえば、写真が 422480 の場合、422624)。
接続の詳細やデータに問題はありません。電話が接続を確立し、データを送信すると、電話が送信を停止するか、サーバーが受信を停止します。何が原因でしょうか?
編集: サンプル データへのリンクhttp://pastebin.com/BS9HjKhg
Edit2: サーバーまたは iOS が画像の + をスペースに変換しています。正しい送信方法がわかったら、回答を投稿します。