2012-03-03 10 views
3

私は、オーディオファイルとJSON文字列の両方をPHPサーバーに送信しようとしています。次のコードでJSONを送信しますが、ファイルは空になります。オーディオブロックの下にJSONブロックを置くと、ファイルは完全に届きますが、JSONは空です。何かご意見は?iOSでオーディオファイルとJSON文字列を送信

- (void)sendFile:(NSString *)filePath URL:(NSString *)urlString JSON:(NSData *)jsonBody 
    { 
     NSString *jsonString = [[NSString alloc] initWithData:jsonBody encoding:NSUTF8StringEncoding]; 
     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
     [request setURL:[NSURL URLWithString:urlString]]; 
     [request setHTTPMethod:@"POST"]; 

     if ([defaults objectForKey:@"UserToken"]) { 
      // add the header to the request. 
      [request addValue:[defaults objectForKey:@"UserToken"] forHTTPHeaderField:@"token"]; 
     } 

     NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
     NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
     [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 


     NSMutableData *body = [NSMutableData data]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"body\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithString:@"Content-Type: application/json\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:@"%@\r\n", jsonString] dataUsingEncoding:NSUTF8StringEncoding]]; 

     [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"recording\"; filename=\"recording.wav\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[NSData dataWithContentsOfFile:filePath]]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

     // set request body 
     [request setHTTPBody:body]; 

     // send the request (submit the form) and get the response 
     NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
     NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

     NSLog(@"%@", returnString); 
} 
+0

ファイルをサーバーのディスクに書き込む方法を教えてください。そして、バックエンドには何を使っていますか? – 8vius

答えて

0

上記のコードは正しいです。

recordingを探しているときに、PHPコードがファイル変数fileを探していました。

0

バイナリをBase64文字列に変換すると、ファイルを簡単に文字列パラメータとして送信できます。

MacとiOSのBase64エンコーディングについては、hereをご覧ください。

希望します。

+0

文字列はバイナリよりも約30%大きくなります。 –

関連する問題