2013-07-30 41 views
-1

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

因为它只是为了一些可行性分析的另一个功能,所以你可以请指导我一个最简单的方法来实现读取和写入文件从服务器位置?或者,是否有必要编写一些服务器端代码(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]; 

在此先感谢。

+0

我不明白为什么我否决了我的问题打从服务器使用的音频。服务器管理工​​程师给了我一个服务器位置(http路径),并让我以编程方式保存并下载音频文件。作为一名前端应用程序开发人员,我提出了一个有效的问题。根据回复,我可以让管理员为我提供一个Web服务,而不是在服务器上的文件夹位置。请帮忙。 – Ashok

回答

0

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

请注意,您必须在您的服务器上有一些要对POST进行响应并将文件保存到某处的内容,这不仅仅是神奇地免费提供。

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]; 

} 
+0

您能否详细说明strURL(您的服务器地址)是什么意思?我提供的所有服务器管理员都是服务器上的文件夹位置(http://.../folder/)。 – Ashok

+0

是的,它是在服务器上的服务器管理文件夹位置的地址(http://.../folder/) –

+0

我试过你的解决方案,但是我在服务器位置看不到该文件。 NSString * recordedTmpFile = [[NSBundle mainBundle] pathForResource:@“gw1”ofType:@“caf”]; NSData * file1Data = [NSData dataWithContentsOfFile:recordedTmpFile]; 我在应用程序包中有我的测试音频(caf)文件,因此我使用上面的代码来指定路径。 我可以在浏览器中打开strURL路径,这样就不会出错。 – Ashok

相关问题