POST请求视频 - iOS

时间:2014-05-28 15:33:46

标签: ios cocoa-touch video youtube-api http-post

我有一个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。

1 个答案:

答案 0 :(得分:0)

我最终设法解决了这个问题。主要问题是您必须处理来自YouTube服务器的两个请求/回复。在第一个请求中,您可以设置OAuth标头和参数以及包含视频信息的JSON正文。如果发送正确,此请求将向您发送带有上传网址的回复。然后,您需要使用实际视频文件向上传URL发出另一个请求。然后它会起作用。