【问题标题】:how to upload an audio file using HTTP POST from iPhone?如何使用来自 iPhone 的 HTTP POST 上传音频文件?
【发布时间】:2011-06-01 10:04:29
【问题描述】:

我正在尝试将“caf”格式的音频文件从 iPhone 上传到网络服务器。使用的代码如下所示。问题是,我没有上传任何文件,PHP echo 中的文件名没有输出!任何帮助将不胜感激。

我在iPhone端使用的代码是:

NSData *fileData=[NSData dataWithContentsOfURL:recordedTmpFile];
NSURL *url=[NSURL URLWithString:@"http://somelink.com/upload.php"];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"audio/x-caf; boundary=%@",boundary];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n",[recordedTmpFile lastPathComponent]] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: audio/x-caf\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:fileData];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];

NSError *errr=nil;
NSURLResponse *resp=nil;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&resp error:&errr];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

而PHP代码是:

echo "start";
echo "1".$_FILES['userfile']['name'];
echo "2".$_FILES['userfile']['type'];
echo "end";

谢谢。

- 阿三

编辑#1:

使用 @Gypsa 的编辑,我得到一个错误。代码和错误信息如下:

代码:

NSString *urlString = @"http://somelink/upload.php";
NSURL *url=[NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
ASIFormDataRequest *request=[ASIFormDataRequest requestWithURL:url];
NSLog(@"3333");
//NSString *
[request addFile:recordedTmpFile forKey:@"userfile"];
[request setRequestMethod:@"POST"];
//[request setDelegate:self];
NSLog(@"555");
[request setTimeOutSeconds:500];
[request startSynchronous];
NSLog(@"666");
NSLog(@"responseStatusCode %i",[request responseStatusCode]);
NSLog(@"responseString %@",[request responseString]);

错误信息:

2011-06-01 07:06:10.819 viewer1[16473:207] -[NSURL length]: unrecognized selector sent to    instance 0x5644900
2011-06-01 07:06:10.821 viewer1[16473:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSURL length]: unrecognized selector sent to instance 0x5644900'
   terminate called after throwing an instance of 'NSException'

编辑#2: 看起来我需要将音频文件的地址从 NSURL 转换为 NSString :

NSString urlString=[url absoluteString];

但是,现在我没有从我的 php 页面得到任何响应..响应为 null :(

编辑#3:

我收到的错误消息是:

responseError Error Domain=ASIHTTPRequestErrorDomain Code=6 "No file exists at file://localhost/var/folders/45/45y8AmvjHvyUUl0mCOpmC++++TI/-Tmp-/328620103851.caf" UserInfo=0x534e500 {NSLocalizedDescription=No file exists at file://localhost/var/folders/45/45y8AmvjHvyUUl0mCOpmC++++TI/-Tmp-/328620103851.caf}

响应状态码为0。

编辑#4:

解决了!!!看答案:)

【问题讨论】:

  • 响应状态码是什么
  • @Gypsa : 响应状态码为 0 !

标签: iphone http post upload


【解决方案1】:

我已使用此代码进行视频上传,您可以将其用于音频上传。

NSString *str = [NSString stringWithFormat:@"%@/uploadVideoIphone.php",appUrl];
NSURL *url = [NSURL URLWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];      
NSString *filePath = [urlvideo path];
[request addFile:filePath forKey:@"uploadfile"];                        
[request setRequestMethod:@"POST"];
[request setDelegate:self];
[request setTimeOutSeconds:500];
[request startSynchronous];
NSLog(@"responseStatusCode %i",[request responseStatusCode]);
NSLog(@"responseString %@",[request responseString]);

【讨论】:

  • @Gypsa :添加视频文件后出现错误。请查看更新后的帖子!
  • 你有音频文件的nssring路径
  • @Gypsa :发布在主要问题的末尾。
  • @ahsan 这个变量记录的TmpFile的类型是什么
  • 我明白了你要做的是:-NSString *filePath = [recordedTmpFile path];并执行 [request addFile:filePath forKey:@"userfile"];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2011-07-12
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
相关资源
最近更新 更多