如何在ios中使用POST将m4a文件上传到服务器

时间:2015-09-23 09:35:55

标签: ios objective-c http-post

我正在尝试使用post方法将文件上传到服务器。它是一个录制的文件。我无法这样做,这是我的代码。

 NSString *name=[NSString stringWithFormat:@"18Sep15_032456PM.m4a"];

NSString *bodyString1 = [NSString stringWithFormat:@"Id=%d&type=%d&audio=%@",39,1,name];
//Entity_Id,charms_type,charm_audio
NSData *data1 = [bodyString1 dataUsingEncoding:NSUTF8StringEncoding];


NSString *strURL =@" "; // my server address

// NSData *file1Data = [NSData dataWithContentsOfFile:[recordedTmpFile path]];

// recordedTmpFile= your audio file path


NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
[request setURL:[NSURL URLWithString:strURL]];
[request setHTTPMethod:@"POST"];

NSString *boundary = @"----------------------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:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n",name]] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:data1]];

[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];


[request setHTTPBody:body];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding] ;
NSLog(@"Return String= %@",returnString);

关于我的问题,请帮助我。

1 个答案:

答案 0 :(得分:0)

使用STHTTPRequest。只需2个文件即可包含在您的项目中并且易于使用。

示例:

STHTTPRequest *request = [STHTTPRequest requestWithURLString:@"urlHere"];
//Any parameter for request set here
NSString *strFileName=[NSString stringWithFormat:@"18Sep15_032456PM.m4a"];
request.POSTDictionary = @{ @"Id":@"39", @"type":"1"};

//upload file
NSData *filedata = [NSData dataWithContentsOfFile:filePathHere];
[request addDataToUpload:filedata parameterName:@"audio" mimeType:@"audio/mp4 m4a" fileName:strFileName];
//upload block here
request.uploadProgressBlock= ^(NSInteger bytesWritten,
                        NSInteger totalBytesWritten,
                        NSInteger totalBytesExpectedToWrite) {
   // notify user of upload progress
   // use the stream
}

//on completion
request.completionBlock = ^(NSDictionary *headers, NSString *body) {
   NSLog(@"headers : %@\nBody : %@",headers,body);
};

//error block here
request.errorBlock = ^(NSError *error) {

    NSLog(@"Error: %d", [error localizedDescription]);
};

//start request
[request startAsynchronous];