AFNetworking - 上传视频和其他参数
Posted
技术标签:
【中文标题】AFNetworking - 上传视频和其他参数【英文标题】:AFNetworking - Upload video along with other parameters 【发布时间】:2013-06-29 13:51:03 【问题描述】:我想将视频与其他一些参数一起上传到网络服务。我想上传 userID、videoID 和 video 到网络服务。上传时,除了视频之外的所有参数都被发送到网络服务。我在网络服务端检查过,视频没有随请求一起提供。我正在使用以下代码。
- (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】:
我不擅长这种方法。我遇到过同样的问题。但是,我已经修复了它,就像混合 POST 和 GET 方法一样。我只是将我的参数作为 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 中带有图像和其他参数的多部分数据