Youtubevideo上传使用NSURLRequest

我正尝试使用NSURLRequest将video上传到YouTube。 我能够validation和用户和video上传,当检查它说失败(无法转换video文件)我不知道该怎么做,请usggest

构build请求

Authorization = "Bearer ya29.AHES6ZTQ3rJZaf2g3pIYa_7_myg1N_GvQ4VdmJIcapfoqKIfQf-Iow"; Connection = close; "Content-Length" = 1848078; "Content-Type" = "multipart/related; boundary=217NH17UDP"; "GData-Version" = 2; Host = "uploads.gdata.youtube.com"; Slug = "videoFile.mp4"; "X-GData-Key" = "key=AI39si4b-ta8ku-hbsLt73O0rIlOBjpHbITt8WGrwL7OevwjNjl5EFcowlJlBM6kp3rrU1cw64Vobp1l1lJP31Rqavshl4962A"; --217NH17UDP Content-Type: application/atom+xml; charset=UTF-8 <?xml version="1.0"?> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007"> <media:group> <media:title type="plain">Sample Video File</media:title> <media:description type="plain"> Description of the sample video </media:description> <media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">Music </media:category> <media:keywords>Keywords</media:keywords> </media:group> </entry> --217NH17UDP Content-Type: video/mp4 Content-Transfer-Encoding: binary Video data (NSData) --217NH17UDP-- 

如“ https://developers.google.com/youtube/2.0/developers_guide_protocol_direct_uploading#Direct_uploading ”中所述,

请build议…

你可能想将content_type设置为video / *

只有完全按照规定执行请求(即使是单个空间很重要),它也能正常工作。

最后能够上传video,这里有200%的工作代码。

 NSString* const kMetaData = @"<?xml version=\"1.0\"?>\r\n<entry xmlns=\"http://www.w3.org/2005/Atom\"\r\nxmlns:media=\"http://search.yahoo.com/mrss/\"\r\nxmlns:yt=\"http://gdata.youtube.com/schemas/2007\">\r\n<media:group>\r\n<media:title type=\"plain\">%@</media:title>\r\n<media:description type=\"plain\">\r\n%@\r\n</media:description>\r\n<media:category\r\nscheme=\"http://gdata.youtube.com/schemas/2007/categories.cat\">%@\r\n</media:category>\r\n<media:keywords>%@</media:keywords>\r\n</media:group>\r\n</entry>\r\n"; - (void)uploadVideo:(NSString *)videoFilePath videoInfo:(NSDictionary*)inVideoInfo { NSData* videoData = [NSData dataWithContentsOfFile:videoFilePath]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:kVideoUploadURL]]; request.HTTPMethod = @"POST"; //header values [request setValue:kHostHeaderFiels_Upload_Value forHTTPHeaderField:kHostHeaderField_Key]; [request setValue:[NSString stringWithFormat:@"%@ %@", self.tokenType, self.accessToken] forHTTPHeaderField:kAuthorizationHeaderField_Key]; [request setValue:@"2" forHTTPHeaderField:kGdataVersionHeaderField_Key]; [request setValue:videoFilePath.lastPathComponent forHTTPHeaderField:kSlugHeaderField_key]; [request setValue:[NSString stringWithFormat:kContentTypeHeaderField_Upload_Value, kBoundary_Value] forHTTPHeaderField:kContentTypeHeaderField_Key]; [request setValue:kConnectionHeaderField_Value forHTTPHeaderField:kConnectionHeaderField_Key]; [request setValue:kGdataKeyHeaderField_Value forHTTPHeaderField:kGdataKeyHeaderField_Key]; //Post Data NSMutableData* httpBodyData = [NSMutableData data]; [httpBodyData appendData:[[NSString stringWithFormat:@"--%@\r\n", kBoundary_Value] dataUsingEncoding:NSUTF8StringEncoding]]; [httpBodyData appendData:[@"Content-Type: application/atom+xml; charset=UTF-8\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; NSString *title, *descrition, *keywords, *category; title = [inVideoInfo objectForKey:kVideoTitle]; descrition = [inVideoInfo objectForKey:kVideoDescription]; keywords = [inVideoInfo objectForKey:kVideoKeywords]; category = [inVideoInfo objectForKey:kVideoCategory]; NSString* metaData = kMetaData; metaData = [NSString stringWithFormat:metaData, title, descrition, category, keywords]; [httpBodyData appendData:[metaData dataUsingEncoding:NSUTF8StringEncoding]]; //Meta Data [httpBodyData appendData:[[NSString stringWithFormat:@"--%@\r\n", kBoundary_Value] dataUsingEncoding:NSUTF8StringEncoding]]; //boundary string [httpBodyData appendData:[[NSString stringWithFormat:@"Content-Type: video/%@\r\n", videoFilePath.pathExtension] dataUsingEncoding:NSUTF8StringEncoding]]; [httpBodyData appendData:[@"Content-Transfer-Encoding: binary\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [httpBodyData appendData:videoData]; [httpBodyData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", kBoundary_Value] dataUsingEncoding:NSUTF8StringEncoding]]; [request setValue:[NSString stringWithFormat:@"%u", httpBodyData.length] forHTTPHeaderField:kContentLengthHeaderField_Key]; request.HTTPBody = httpBodyData; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue new] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { if(connectionError || data == nil) { self.uploadHandler(NO, nil); } else { NSXMLParser *xmlparser = [[NSXMLParser alloc] initWithData:data]; xmlparser.delegate = self; [xmlparser parse]; } }]; }