ios - 无法在 iOS 上的 AFNETWORKING 中使用多部分 POST 上传视频

标签 ios objective-c upload afnetworking multipartform-data

我尝试使用下面的代码在 AFnetworking 中使用 Multi part form POST 上传视频,但是在上传时,发送的视频大约有 80% 被破坏了。这是我的代码:

    -(void) uploadVideoAPI: (NSString*) emailStr andSumOfFiles: (NSString*) sumSizeFile  andVideoNams:(NSMutableArray*) videoNameArr andUpFile :(NSMutableArray *) videoDataArray
{
    NSURL *url = [NSURL URLWithString:@"http://myserver.com];

    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL: url] ;

    NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:nil parameters:nil constructingBodyWithBlock:^(id <AFMultipartFormData>formData) {
        [formData appendPartWithFormData:[emailStr dataUsingEncoding:NSUTF8StringEncoding]
                                    name:@"emailStr"]; //parametters1

        [formData appendPartWithFormData:[sumSizeFile dataUsingEncoding:NSUTF8StringEncoding] name:@"sumSizeFile"];//parametters 2

        for(int i=0;i<[videoDataArray count];i++)
        {
            NSString * videoName = [videoNameArr objectAtIndex:i];
            NSData *videoData = [videoDataArray objectAtIndex:i];
            [formData appendPartWithFileData:videoData
                                        name:@"videos"
                                    fileName:videoName mimeType:@"video/quicktime"];
        }

    }];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
        NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);

    }];
    [httpClient enqueueHTTPRequestOperation:operation];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Upload Complete");
    }
                                     failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                         NSLog(@"error: %@", operation.responseString);
                                         NSLog(@"%@",error);
                                     }];
    [operation start];


}

我的代码有问题吗?请给我一些建议。提前致谢

最佳答案

我建议您对文件使用 appendPartWithFileURL 而不是 appendPartWithFormData 以避免内存问题(想像视频或压缩数据文件等大数据)。

我用的是这样的:

// Create request
NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:nil parameters:nil constructingBodyWithBlock:^(id <AFMultipartFormData>formData) {
    // Important!! : file path MUST BE real file path (so -> "file://localhost/.../../file.txt") so i use [NSURL fileURLWithPath:]
    NSError* err;
    [formData appendPartWithFileURL:[NSURL fileURLWithPath:filePathToUpload] name:[fileInfo objectForKey:@"fileName"] error:&err];
}];

关于ios - 无法在 iOS 上的 AFNETWORKING 中使用多部分 POST 上传视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21249074/

相关文章:

iphone - 加载 ScrollView 的性能不佳

ios - 如何在 Objective c 中动态设置 UILabel 高度?

ruby - 可扩展的自托管文件上传到 Ruby on Rails

ios - 未显示 UIWebView

objective-c - NSDateFormatter 获取 stringFromDate 错误

objective-c - 带有动态字符串的 UIImage 错误

ruby-on-rails - Rails Valums Ajax 上传

c# - 无法在 C# 中使用 SSH.NET 上传文件 SFTP - 权限被拒绝

javascript - 如何在 Protractor 测试中设置 $interval 而不是超时

objective-c - 意外删除 Bridging-Header.h 文件