我有一个iOS应用程序通过POST请求发送到YouTube上的视频文件(通过OAuth 2.0授权)。但是,我收到错误回复,说“找不到(404)”。
我认为问题是我需要添加一个JSON参数体(就像这个:https://developers.google.com/youtube/v3/docs/videos#resource),但我不太确定。
我一直按照Google Dev Page上的说明进行操作:https://developers.google.com/youtube/v3/docs/videos/insert#examples
这是我的代码:
NSData *videoData = [NSData dataWithContentsOfURL:videoUrl];
NSString *yt_upload = [NSString stringWithFormat:@"https://www.googleapis.com/upload/youtube/v3/videos&access_token=%@", token_youtube];
NSString *urlString = yt_upload;
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=\".mov\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:videoData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
NSHTTPURLResponse *response = nil;
NSError *error = nil;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"%@", response);
NSLog(@"%@", returnString);
NSLog(@"%@", error);
有谁知道什么是错的?为什么视频没有正确上传?
谢谢你的时间,Dan。
答案 0 :(得分:0)
我最终设法解决了这个问题。主要问题是您必须处理来自YouTube服务器的两个请求/回复。在第一个请求中,您可以设置OAuth标头和参数以及包含视频信息的JSON正文。如果发送正确,此请求将向您发送带有上传网址的回复。然后,您需要使用实际视频文件向上传URL发出另一个请求。然后它会起作用。