从iOS本机应用程序上传和下载文件到服务器位置

时间:2013-07-30 17:36:21

标签: ios http networking

我想从我的iOS原生应用程序上传和下载一些文件(特别是扩展名为.caf的音频文件)到服务器(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];

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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];

}