私はユーザーがポッドキャストをアップロードできるウェブサイトに取り組んでいます。ポッドキャストはMP3ファイルであり、AmazonS3バケットに保存されます。
これの通常の流れは何ですか?私はグーグルで検索しましたが、ファイルのアップロードに関連する記事はすべてAmazonクライアントライブラリを使用する傾向があり、タイムアウトのために、MP3ファイルのアップロードにPHP(LAMPスタックを使用)を使用したくないのが理想的です。サイズ制限など
これを回避する方法はありますか?
AmazonS3は直接アップロードをサポートしています。これはここでのオプションかもしれません。PHPの実装については、この投稿を確認してください。
たくさんのグーグルを繰り返し、GitHubリポジトリと新しいPHP SDKのAmazonドキュメントの両方を行ったり来たりした後、Amazonの新しいPHP SDKを使用してフォームフィールドを生成し、Uploadifyを使用して実際にファイルを直接アップロードするソリューションがあります。私のサーバーをバイパスして、Amazonに。コードは次のようになります。
<?php
$bucket = (string) $container['config']->images->amazon->bucket;
$options = array(
'acl' => CannedAcl::PUBLIC_READ,
'Content-Type' => 'audio/mpeg',
'key' => 'audio/a-test-podcast.mp3',
'success_action_redirect' => (string) $container['config']->main->base_url . 'upload/success/',
'success_action_status' => 201,
'filename' => '^'
);
$postObject = new PostObject($container['amazon_s3'], $bucket, $options);
$postObject->prepareData();
$formAttributes = $postObject->getFormAttributes();
$formInputs = $postObject->getFormInputs();
$uploadPath = $formAttributes['action'];
?>
<script>
(function($) {
$('#podcast').uploadify({
'buttonClass': 'button',
'buttonText': 'Upload',
'formData': <?php echo json_encode($formInputs); ?>,
'fileObjName': 'file',
'fileTypeExts': '*.mp3',
'height': 36,
'multi': false,
'onUploadError': function(file, errorCode, errorMsg, errorString) {
console.log('onUploadError', file, errorCode, errorMsg, errorString);
},
'onUploadSuccess': function(file, data, response) {
console.log('onUploadSuccess', file, data, response);
},
'swf': '/assets/cms/swf/uploadify.swf',
'uploader': '<?php echo $uploadPath; ?>',
'width': 120
});
})(jQuery);
</script>
S3へのリクエストは、有効な秘密鍵で署名する必要があり、常に認証が含まれている必要があります。理論的にはJavaScriptを使用してクライアント側でこれを行うことができますが、秘密鍵をクライアント側に公開したくない場合は、ヘッダーに署名するためのAjax呼び出しが必要になります。もう1つの問題は、ブラウザの互換性です。最近のすべてのブラウザで利用できる、ファイルスライスを使用して、より大きなファイルのチェックサムを計算する必要があります。
より簡単な方法は、PHPまたはその他のサーバー側スクリプト言語を使用したサーバー側ソリューションです。
phpを使用していても、ファイルサイズについて心配する必要はありません。ファイルのアップロードファイルサイズ制限と実行メモリ制限を構成でき、php.ini
s3のphpライブラリを使用すると作業が軽減されます。このガイドから始めることができます。