2

いくつかのパラメーターを使用して投稿を送信し、base64 に画像を含めようとしています。

画像コーディングはうまくいきます。オンラインのbase64から画像へのコンバーターでbase64画像を確認したところ、画像が正常にエンコードされたようです。問題なくポスト プロセスを実行できますが、ダウンロードすると、ログに次のエラーが表示されます。

エラー: ImageIO: JPEG 破損した JPEG データ: マーカー 0xf1 の前に余分な 120 バイト
エラー: ImageIO: JPEG サポートされていないマーカー タイプ 0xf1

メソッドでこれを行います

jpgData = UIImageJPEGRepresentation(image, 0.1f);
imageString = [jpgData base64EncodedStringWithOptions:0];

そして、これは投稿を送信するメソッドであり、エラーがあると思います。

- (void)putComment{

    dispatch_queue_t backgroundQueue = dispatch_queue_create("com.mycompany.myqueue", 0);

    __block int responseCode = 0;

    dispatch_async(backgroundQueue, ^{



        NSString *requestParams = [NSString stringWithFormat:
                             @"idAdvertiser=%@&idUserDevice=%@&image=%@&text=%@&userName=%@&groups=%@",
                               ADVERTISER_ID, idUserDevice, imageString, texto, userName, groups];
        [requestParams stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];
        NSData   *postData = [requestParams dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
//        NSData   *postData = [requestParams dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
        NSString *postLenght = [NSString stringWithFormat:@"%d", [postData length]];

        NSMutableURLRequest *request = [NSMutableURLRequest new];
        [request setURL:[NSURL URLWithString: URL_COMMENT]];
        [request setHTTPMethod:@"POST"];
        [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
        [request setHTTPShouldHandleCookies:NO];
        [request setValue:postLenght forHTTPHeaderField:@"Content-Length"];
        [request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Current-Type"];
        [request setHTTPBody:postData];
        [request setTimeoutInterval:40];


        NSError *error = nil;
        NSHTTPURLResponse *response;
        NSData *responseData = [NSURLConnection sendSynchronousRequest: request
                                                 returningResponse: &response
                                                             error: &error];
   });

}

サーバー側は完全に動作する (Android アプリでテスト済み) ため、問題はサーバーに関連していません。

4

1 に答える 1

0

URL をエンコードするので、次の行は必要ありません。

    [requestParams stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];

削除して、もう一度やり直してください。

また

[request setURL:[NSURL URLWithString: URL_COMMENT]]; 

次のように変更できます。

[request setURL:[NSURL URLWithString: [URL_COMMENT stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
于 2013-11-14T12:21:16.250 に答える