Vimeo PHP ライブラリ (http://github.com/vimeo/vimeo-php-lib/blob/master/vimeo.php) と BlueImp の jQuery File Uploader (https://github.com/ blueimp/jQuery-File-Upload)。私の問題は、アップロード プロセス中に進行状況イベントを取得することです。これは可能ですか? アップロード元の一時ページは次のとおりです (ビデオのアップロードは一時的にハードコードされています)
<?php if($_SESSION['ticket']){
//check upload status
}
?>
<button id="btn">Upload to vimeo</button>
<div id="status"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$('#btn').click(function(){
//alert('clicked');
$('#status').html('working...'); //this will continue in the background, need to set a session variable so the same file isn't uploaded twice. but how to get response? check ticket ID which should also be part of the session variable
$.ajax({
url: 'vimeo/upload.php',
data: { file: '13TimberAlley.mov'}
}).done(function(data){
alert('done');
var obj = jQuery.parseJSON(data);
$('#status').html( obj.video_id != undefined ? 'http://vimeo.com/'+obj.video_id:$('#status').html() );
$('#status').html( obj.error != undefined || obj.message != undefined ? obj.error+' '+obj.message:$('#status').html() )
clearInterval(status);
});
status = setInterval(checkUpload,1000);
function checkUpload() {
//alert('check: reload this page to get session vars?');
}
});
</script>
Vimeo アップロード API (https://developer.vimeo.com/apis/advanced/upload) は、ストリーミング (https://developer.vimeo.com/apis/advanced/upload) を介してアップロードのステータスを確認できると述べています。 #streaming-step4) または投稿 (https://developer.vimeo.com/apis/advanced/upload#post-step4)
vimeo api が post メソッドを使用していることはわかりますが、私の問題はいつどこで進行状況をブラウザに返すかです。上記のメソッド (setInterval) を使用すると、最初の ajax 呼び出しから checkUpload JavaScript 関数へのチケット ID および/またはエンドポイントを取得する方法がわかりません。PHPのセッション変数を介してこれを行うことができると思っていましたが、アップロードが完了するまでページをリロードできません(リモートファイルに設定されたセッション変数を表示するため)
413行目あたりの「vimeo.php」を次のように変更しました。
//store ticket id to session variable so we can check upload status, or resume progress indicator if page is reloaded (doesn't work if browser is closed)
session_start();
$_SESSION['ticket']=$ticket;
$_SESSION['endpoint']=$endpoint;
500行目あたりで次のように記述します。
// Confirmation successful, return video id
if ($complete->stat == 'ok') {
//upload was successful, we do not need to store this variable to check progress anymore
unset($_SESSION['ticket']);
unset($_SESSION['endpoint']);
$_SESSION['last_upload'] = 'http://vimeo.com/'.$complete->ticket->video_id;
return $complete->ticket->video_id;
}
何か案は?