環境
私のアプリケーションでは、ユーザーが createUploadUrl() パターンを使用して、Google App Engine 経由で .mp4 ファイルを Google Cloud Storage にアップロードできます。アップロードは正常に機能し、ハンドラーで対応する FileInfo オブジェクトを取得できます。Java 用の App Engine SDK 1.8.2 を使用しています。
チャレンジ
.mp4 ファイルから "duration" プロパティを取得してデータベースに保存する必要がありますが、FileInfo オブジェクトはこのメタデータへのアクセスを提供しません。これを行う方法についていくつかのアイデアがあります (以下にリストします) が、私が取り組んでいるプロジェクトにいくつかのレガシー依存関係があることを考えると、どれもそれほど単純ではありません。
これに取り組む方法について、アイデアや提案があればぜひお聞かせください (できれば成功談もあればぜひ!)。
アイデア
- ファイルからメタデータを読み取ることができる ffmpeg や mdls (Mac 用) などのスクリプトやユーティリティがあることは知っていますが、これらは Google App Engine では実行できず、別のプロセスを開始する必要があると理解しています。 Google Compute Engine のようなものを使用します。
- ユーザーがアップロードするファイルを選択し、標準のフォーム送信でそれを渡すと、期間ロジックを読み取るカスタムのフラッシュ アップロード コントロールを作成できます。
- また、現在ベータ段階にある Google Cloud Storage JSON API があることも認識しています。.mp4 ファイルから「期間」プロパティを読み取れるようにする機能はありませんが、何か不足している可能性があります...
コード
HTMLフォーム
<form name="myForm" id="myForm" action="<%=createUploadUrl("/upload, uploadOptions)%>" method="POST" enctype="multipart/form-data">
<input type="file" name="uploadFileControl" id="uploadFileControl" value="Select...">
<input type="submit" value="Submit">
</form>
サーバー側ハンドラー
DAO dao = new DAO();
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<FileInfo>> fileInfos = blobstoreService.getFileInfos(req);
List<FileInfo> uploadedFile = fileInfos.get("uploadFileControl");
if(uploadedFile != null) {
FileInfo file = uploadedFile.get(0);
String fileName = file.getFilename();
}