-1

我想将一些文件(特别是扩展名为 .caf 的音频文件)从我的 iOS 本机应用程序上传和下载到服务器 (http) 位置。服务器管理员为我提供了 http 文件夹路径 (http:...)。

由于它只是为了对另一个功能进行一些可行性分析,所以你能指导我用一种最简单的方法来实现从服务器位置读取和写入文件吗?或者,是否有必要编写一些服务器端代码(Web 服务)来实现它?

仅供参考:我在服务器位置有一个示例文本文件,我可以使用 ASIHTTPRequest 直接读取该文件(见下文 - 此处未使用 Web 服务 - 请原谅指定编辑路径)。但我不知道如何上传文件。

    NSURL *url = [NSURL URLWithString:@"http://...Dispatcher/DispatcherTest.txt"];
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

[request setCompletionBlock:^{
    // Use when fetching text data
    NSString *responseString = [request responseString];
    NSLog(@"responseString = %@", responseString);
}];

[request setFailedBlock:^ {
    NSError *error = [request error];
    NSLog(@"error = %@", error);
}];

[request startAsynchronous];

提前致谢。

4

2 回答 2

0

对于服务器上的存储文件,请使用以下代码

-(void) Storeonserver
{

    NSUserDefaults *dflts=[NSUserDefaults standardUserDefaults];
    NSString *strURL = // your server address

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

//recordedTmpFile= your audio file path


    NSString *name=[NSString stringWithFormat:@"abc.caf"];

    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:file1Data]];
    [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);
}

要从服务器下载和播放音频,请使用以下代码

-(void) playAudio
{
//Play recoding from server
NSUrl *url=[NSURL URLWithString:@"http://yourServerSideUrl/abc.caf"]
NSData *mydata = [NSData dataWithContentsOfURL:url];
AVAudioPlayer * avPlayer = [[AVAudioPlayer alloc] initWithData:mydata error:nil];
[avPlayer prepareToPlay];
[avPlayer play];

}
于 2013-07-31T05:04:28.413 回答
0

如果您使用 ASIHTTPRequest,则使用 HTTP POST 发送文件。请参阅文档中的“使用 ASIFormDataRequest 发送表单 POST”。但是,ASIHTTPRequest 不再处于开发阶段。您可能想要选择一个保持最新状态的库。我喜欢 MKNetworkKit。

请注意,您的服务器上必须有一些东西可以响应 POST 并将文件保存在某处,这不仅仅是神奇地免费提供的。

于 2013-07-30T17:59:28.700 回答