AFNetworking - 上传视频和其他参数

Posted

技术标签:

【中文标题】AFNetworking - 上传视频和其他参数【英文标题】:AFNetworking - Upload video along with other parameters 【发布时间】:2013-06-29 13:51:03 【问题描述】:

我想将视频与其他一些参数一起上传到网络服务。我想上传 userIDvideoIDvideo 到网络服务。上传时,除了视频之外的所有参数都被发送到网络服务。我在网络服务端检查过,视频没有随请求一起提供。我正在使用以下代码。

- (void)uploadVideoAtLocalPath:(NSString *)videoPath videoID:(NSString *)videoID userID:(NSString *)userID 

    NSString *strServerURL = @"www.mysite.com/user/uploadVideo";
    NSURL *URL = [NSURL URLWithString:strServerURL];
    AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:URL];

    NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"" parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) 

        // userID
        NSData *userIDData = [userID dataUsingEncoding:NSUTF8StringEncoding];
        [formData appendPartWithFormData:userIDData name:@"userID"];

        // videoID
        NSData *videoIDData = [videoID dataUsingEncoding:NSUTF8StringEncoding];
        [formData appendPartWithFormData:videoIDData name:@"videoID"];

        // video
        NSData *videoData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:videoPath]];
        [formData appendPartWithFileData:videoData name:@"video" fileName:@"video.mov" mimeType:@"video/quicktime"];
    ];

    [request setURL:URL];
    [request setTimeoutInterval:60.0];
    [request setHTTPMethod:@"POST"];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [AFHTTPRequestOperation addAcceptableStatusCodes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(100, 500)]];
    [operation setCompletionBlockWithSuccess: ^(AFHTTPRequestOperation *operation, id responseObject) 
        NSLog(@"Response String: %@", operation.responseString);
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
        NSLog(@"Failure: %@", error);
    ];

    [client enqueueHTTPRequestOperation:operation];

谁能告诉我我做的是否正确?如果没有,谁能告诉我如何将视频与其他参数一起上传到网络服务?

谢谢大家!

【问题讨论】:

你检查过videoData是否为nil吗? 你能不能尝试把userID和videoID附在NSDictionary里面,放在方法multipartFormRequestWithMethod的参数里面,而不是把nil? @AttilaH:嗨,videoData 不是零。我已经检查过了。谢谢。 @verbumdei,嗨,我也试过了,但没用。无论如何,我会再试一次(可能是我以前没有做对),并让你知道。谢谢。 感谢@EmptyStack,通过使用您的代码,我能够将图像上传到我的服务器。 【参考方案1】:

我不擅长这种方法。我遇到过同样的问题。但是,我已经修复了它,就像混合 POSTGET 方法一样。我只是将我的参数作为 GET 方法发送,如下所示 -

NSString *strServerURL = [NSString stringWithFormat:@"www.mysite.com/user/uploadVideo&userID=%d&videoID=%d", 1, 55];

并且,按照您的方法以 POST 方法发送我的视频数据 -

NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"" parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) 

    // video
    NSData *videoData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:videoPath]];
    [formData appendPartWithFileData:videoData name:@"video" fileName:@"video.mov" mimeType:@"video/quicktime"];
];

您最好尝试修改您的网络服务并尝试像上面的方式。它应该可以工作。

干杯!

【讨论】:

以上是关于AFNetworking - 上传视频和其他参数的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发-AFNetworking参数和多文件同时上传多文件上传

AFNetworking 3.0 中带有图像和其他参数的多部分数据

AFNetworking 上传带参数的图片

使用 AFNetworking 发送图像和其他参数

如何在上传带参数的图像时使用 AFNetworking 2.0 设置 cookie?

AFNetworking 使用 NSMutableURLRequest 上传?