在iOS中发送audio文件和JSONstring

我试图发送一个audio文件和一个JSONstring到PHP服务器。 用下面的代码将发送JSON,但文件到达空。 如果我把JSON块放在audio块下面,文件完全到达,但是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); } 

上面的代码是正确的。

PHP代码正在寻找文件variablesfile当它应该寻找recording

您可以通过将二进制文件转换为Base64string,将文件作为string参数轻松发送。

在这里看看有关Mac和iOS上Base64编码的信息。

希望能帮助到你 :)