Java の例:動画をアップロードする

Product
Video Cloud
対象となる役割
開発者
バージョン
Brightcove 5
モジュール
Media API
エディション
Pro, Enterprise

このアプリケーション例では、Java と Media 書き込み API を使用して、HTML ページで動画をメディア ライブラリにアップロードします。HTML フォームページの背後にサーブレット クラスがあり、このクラスが動画名、説明、ファイルを取得して、create_video メソッドに渡します。サンプルは 2 つのファイルで構成されています。

  • UploadVideo.java。フォームからの入力を取り込み、書き込み API の create_video メソッドへ渡すサーブレット クラスを定義します。
  • uploadVideoForm.html。ユーザーが動画の名前、説明、およびパスを入力するフォームを表示します。フォームの送信ボタンで、入力内容が UploadVideo サーブレットに渡されます。

事前確認事項

読者は、Java サーブレットとフォームの扱いに習熟している必要があります。

UploadVideo サーブレット クラス

サーブレット クラスはフォームからの送信を受け取り、データを 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 + "\"}, " +
 
          "}}";

ここでの重要なポイントは以下のとおりです。

  • 呼び出すメソッドは、GET 呼び出しのクエリ文字列ではなく、JSON パラメータになっています。
  • params には、トークンや動画メタデータ オブジェクトなど、この呼び出しに必要となるその他の引数のオブジェクトが含まれています。
  • 動画メタデータ オブジェクトでは、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 は、この動画のメタデータを含む文字列です。後で詳しく説明します。
  • videoFilenamevideoFile は、アップロードするファイルを指しています。

HTML フォームを使用してアップロードする

このように 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 メソッドを呼び出します。

タグ
サンプル, アップロード