使用目标c从app上传到服务器的文件

时间:2012-11-29 14:37:34

标签: iphone objective-c ios xcode file

我正在使用此代码将音频文件从iphone app上传到服务器。

 NSFileManager *fileManager = [[NSFileManager alloc] init];
    NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:mediaPath error: NULL];

    NSLog(@"%@",fileAttributes);
    if (fileAttributes != nil) {

        NSNumber *fileSize;
        fileSize = [fileAttributes objectForKey:NSFileSize];
        NSLog(@"%@",fileSize);

       // NSData *audioData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:audioData ofType:@""]];

        NSString *urlString = [NSString stringWithFormat:@"%@audioupload.php",mydomainurl];


        NSLog(@"%@",audioData);
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
        [request setURL:[NSURL URLWithString:urlString]];
        [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:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\".caf\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[NSData dataWithData:audioData]];
        [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [request setHTTPBody:body];

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

        NSLog(@"%@",returnString);

这样做会将.caf文件转换为二进制文件并花费太多(1-2分钟)时间在服务器上传音频。不仅如此,服务器中的文件大小也越来越大。我已经包括了

ASIFormDataRequest 

但不知道如何在我的代码中使用它。任何人都可以建议我如何减少上传时间。

但是

1 个答案:

答案 0 :(得分:1)

我有一个应用程序非常快速地执行此操作,我的代码与您的代码非常相似。

唯一的区别在于:

 [body appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\".caf\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

我有一个文件名,而不仅仅是.caf扩展名:

[body appendData:[@"Content-Disposition: attachment; name=\"file2\"; filename=\"test.caf\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

此外,使用以下行将音频数据附加到正文后:

[body appendData:[NSData dataWithData:audioData]];

在您使用此行关闭表单之前:

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

我有这一行:

[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

我希望这适合你。如果没有,你应该检查你的服务器端代码,因为你和我的代码几乎相同,我的上传音频非常快。