このアプリケーション例では、Java と Media 書き込み API を使用して、HTML ページで動画をメディア ライブラリにアップロードします。HTML フォームページの背後にサーブレット クラスがあり、このクラスが動画名、説明、ファイルを取得して、create_video メソッドに渡します。サンプルは 2 つのファイルで構成されています。
UploadVideo サーブレットに渡されます。読者は、Java サーブレットとフォームの扱いに習熟している必要があります。
サーブレット クラスはフォームからの送信を受け取り、データを JSON-RPC の書き込み API への呼び出しにフォーマットし直します。この例は、Vlad Patryshev による ClientHTTP ライブラリからの ClientHTTPRequest ヘルパー クラスを使用し、Apache Commons の commons-io および commons-fileupload JAR を必要とします。
このサーブレットで最初に行うのは、HTML フォームから受け取った POST のパースです。
/* ステップ 1。
クライアントから受信した要求を処理
*/
// Jakarta Commons からの FileUpload ライブラリを使用したパースを要求
// http://commons.apache.org/fileupload/
// ディスクベースのファイル項目用のファクトリを作成
DiskFileItemFactory factory = new DiskFileItemFactory();
// 新しいファイル アップロード ハンドラを作成
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1000000000);
// 要求を DiskFileItems のリストにパース
List items = upload.parseRequest(request);
// API 要求に必要なフィールド
String videoName = "";
String videoDescription = "";
File videoFile = null;
String videoFilename = "";
long videoMaxSize = 0;
// DiskFileItems のリスト全体で繰り返す
Iterator iter = items.iterator();
while (iter.hasNext()) {
DiskFileItem item = (DiskFileItem) iter.next();
if (item.isFormField()) {
if (item.getFieldName().equals("name")) {
videoName = item.getString();
} else if (item.getFieldName().equals("desc")) {
videoDescription = item.getString();
}
} else {
videoFile = item.getStoreLocation();
videoFilename = item.getName();
videoMaxSize = item.getSize();
}
}
この例では、Jakarta Commons のヘルパー ライブラリを使用して、要求をパースしています。自分で記述するか、または、この用途のために開発された多くのオープン ソース ライブラリの 1 つを使用してもかまいません。このライブラリは multipart の POST(アップロード フォームから送信される形式)を取り込み、List の「FileItems」に格納します。このリストを反復処理すれば、file フィールドからメタデータ フィールドを取り出すことができます。
次の段階では、メタデータを JSON にエンコードします。
/* ステップ 2。
JSON パラメータを組み立てる
*/
String json = "{\"method\":\"create_video\"" +
", \"params\":{" +
"\"token\":"+ "12345asdfasdfa67898" + ", " +
"\"video\":" +
"{\"name\":\"" + videoName + "\", " +
"\"shortDescription\":\"" + videoDescription + "\"}, " +
"}}";
ここでの重要なポイントは以下のとおりです。
name および shortDescription を指定し(この 2 つは必須)、さらに任意で tags、relatedLink、economics などの設定可能なプロパティを指定できます。最後に、この JSON 文字列とファイル データを取り込み、書き込み API に POST します。動画をアップロードするための呼び出しの構成を見て見ましょう。サーブレットのコードの最後の部分です。
// API への URL を定義
String targetURL = "http://api.brightcove.co.jp/services/post";
// 要求される params オブジェクトを作成…
Object[] params;
if(videoFile == null) {
params = new Object[] { "JSON-RPC", json };
} else {
params = new Object[] {
"JSON-RPC", json,
videoFilename, videoFile
};
}
// ... このオブジェクトは、Vlad Patryshev による ClientHTTP ライブラリからの ClientHTTPRequest ヘルパー クラスが要求
// http://www.devx.com/Java/Article/17679/1954?pf=true
InputStream in = ClientHttpRequest.post( new java.net.URL(targetURL), params );
Java のネットワーク スタックはかなり低層なので、HTTP 要求を行うためだけにヘルパー ライブラリを使用しています。このライブラリを使用すれば、パラメータのオブジェクトと、POST 先の URL を指定するだけで済みます。
ここでの重要なポイントは以下のとおりです。
"JSON-RPC" は、行う要求の種類です。json は、この動画のメタデータを含む文字列です。後で詳しく説明します。videoFilename と videoFile は、アップロードするファイルを指しています。このように UploadVideo サーブレットを定義したら、シンプルな HTML フォームとともに使用できます。サンプルを参照してください。
このサンプルでは、UploadVideo サーブレットのために POST アクションを定義しています。また、フォームにはアップロードする動画の名前と説明を指定するために入力フィールドが 2 つあり、3 番目のフィールドではファイル システム上の動画ファイルを参照できます。
<FORM ENCTYPE="multipart/form-data" method="POST" action="http://localhost:8080/Library_API_Test/uploadvideo"> 動画名: <INPUT TYPE="text" NAME="name" value="video name"/><br/> 説明: <INPUT TYPE="text" NAME="desc" value="description"/><br/> ファイル: <INPUT TYPE="file" NAME="file" /> <INPUT TYPE="submit" VALUE="Upload"/> </FORM>
フォームの送信ボタンにより、フォームの入力内容が UploadVideo サーブレットに渡されます。サーブレットでは、これまで見てきたとおり、入力内容をパースし、組み立てて、create_video メソッドを呼び出します。