问题
I would like to display a progress bar for direct youtube uploads using the gdata api. I have the uploads getting kicked off in by an ajax call to an uploader.php script, and when it completes, I update the status on the page the user sees. I would really like to set a timer to update a progress bar every 5 seconds or so, so the user doesn't get impatient and cancel a perfectly good upload in progress.
I've seen many posts with people trying to find a way to get progress info back from their uploads while in progress, with the YouTube API using direct uploads. I haven't seen any answers. This seems like something that should be supported in the API. Is there not way to do this?
Is there a completely different way, that would work?
回答1:
You can create a php page and do a "browser based upload" using CURL. This means that you have control over the upload and you can create a progress bar.
Here is an example of how an upload might look like. The bottom part of this code is the interesting part. It makes an "browser based upload" using CURL and then returns the result;
// upload.php
require_once 'Zend/Loader.php'; // the Zend dir must be in your include_path
Zend_Loader::loadClass('Zend_Gdata_YouTube');
$yt = new Zend_Gdata_YouTube();
// Define the authentication that will be used
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
// Authenticate
$authenticationURL= 'https://www.google.com/accounts/ClientLogin';
$httpClient =
Zend_Gdata_ClientLogin::getHttpClient(
$username = "USERNAME",
$password = "PASSWORD",
$service = 'youtube',
$client = null,
$source = 'HTML SOURCE CODE SNIPPET',
$loginToken = null,
$loginCaptcha = null,
$authenticationURL);
$applicationId = 'YOUR APPLICATION ID';
$clientId = 'Upload videos to youtube using the youtube API';
$developerKey = 'YOUR DEVELOPER KEY';
$yt = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developerKey);
// create a new VideoEntry object
$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
$myVideoEntry->setVideoTitle($videoTitle);
$myVideoEntry->setVideoDescription($VideoDescription);
// The category must be a valid YouTube category!
$myVideoEntry->setVideoCategory($VideoCategory);
// Set keywords. Please note that this must be a comma-separated string
// and that individual keywords cannot contain whitespace
$myVideoEntry->SetVideoTags($VideoTags);
$tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
$tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
$tokenValue = $tokenArray['token'];
$postUrl = $tokenArray['url'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $postUrl."?nexturl=http://YOUR_WEBPAGE.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_POST, true);
// same as <input type="file" name="file">
$post = array("file"=>"@".$VideoFile['tmp_name'], "token"=>$tokenValue);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
echo $info;
You can read more here https://developers.google.com/youtube/2.0/developers_guide_php#Browser_based_Upload
来源:https://stackoverflow.com/questions/8395361/progress-bar-for-youtube-direct-uploads-with-data