Este tema explica cómo utilizar una página HTML para cargar un vídeo a la biblioteca multimedia con Java y la API Media Write. Una clase de servlet procesa la página de formulario HTML, obtiene el nombre del vídeo, la descripción y el archivo, y los pasa al método create_video.
Descargando y examinando el ejemplo de código aprenderá a cargar vídeo de manera programada con Java y la API Media Write, y a personalizar la aplicación según necesite.
El ejemplo consta de dos archivos:
UploadVideo.Para poder seguir el código que aparece en este tema, debe estar familizarizado con los servlets de Java y el tratamiento de formularios.
En este tema explicamos:
UploadVideoLa clase de servlet acepta el POST entrante del formulario y cambia el formato de los datos a una llamada JSON-RPC para la API Write. Para el ejemplo siguiente, se utiliza la clase auxiliar ClientHTTPRequest de la biblioteca ClientHTTP de Vlad Patryshev, y se necesitan los archivos JAR commons-io y commons-fileupload de Apache Commons.
En primer lugar, el servlet analiza el POST entrante del formulario HTML:
/* STEP 1.
Tratar la solicitud entrante del cliente
*/
// Solicitar el análisis a través de la biblioteca de FileUpload de Jakarta Commons
// http://commons.apache.org/fileupload/
// Crear un generador para los elementos de archivo basados en disco
DiskFileItemFactory factory = new DiskFileItemFactory();
// Crear un nuevo controlador de carga de archivos
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1000000000);
// Analizar la solicitud en una lista de DiskFileItems
List items = upload.parseRequest(request);
// Campos necesarios para la solicitud de la API
String videoName = "";
String videoDescription = "";
File videoFile = null;
String videoFilename = "";
long videoMaxSize = 0;
// Repetir en la lista de 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();
}
}
Este servlet utiliza una biblioteca auxiliar de Jakarta Commons para analizar la solicitud, pero también puede escribir su propia biblioteca o utilizar una de las muchas bibliotecas de código abierto creadas para este fin. Esta biblioteca utiliza post multipart (del tipo que se envía desde los formularios de carga), y lo guarda en una lista FileItems. Repasando esta lista podrá separar los campos de metadatos de los campos de archivo.
En el siguiente paso se codifican los metadatos en JSON:
/* STEP 2.
Assemble the JSON params
*/
String json = "{\"method\":\"create_video\"" +
", \"params\":{" +
"\"token\":" + "12345asdfasdfa67898" + ", " +
"\"video\":" +
"{\"name\":\"" + videoName + "\", " +
"\"shortDescription\":\"" + videoDescription + "\"}, " +
"}}";
Los puntos importantes a tener en cuenta son los siguientes:
GET.params contiene un objeto de argumentos adicionales para la llamada, como su objeto de metadatos de vídeo y token.name y shortDescription (ambas obligatorias). Opcionalmente, puede definir otras propiedades configurables, como tags, relatedLink, economics, etc.Por último, el servlet toma la cadena JSON y los datos del archivo y utiliza POST para enviar el archivo a Write API. A continuación, podemos observar la estructura de la llamada utilizada para cargar el vídeo en la última parte del código del servlet:
// Definir la URL en la API
String targetURL = "http://api.brightcove.com/services/post";
// Crear el objeto de parámetros solicitado por...
Object[] params;
if(videoFile == null) {
params = new Object[] { "JSON-RPC", json };
} else {
params = new Object[] {
"JSON-RPC", json,
videoFilename, videoFile
};
}
// ... la clase auxiliar ClientHTTPRequest de la biblioteca ClientHTTP de Vlad Patryshev
// http://www.devx.com/Java/Article/17679/1954?pf=true
InputStream in = ClientHttpRequest.post( new java.net.URL(targetURL), params );
Puesto que el nivel de la pila de red de Java es bajo, esta parte del servlet utiliza una biblioteca auxiliar a fin de simplificar la creación de la solicitud HTTP. Con esta biblioteca, únicamente deberá especificar un objeto de parámetros y la dirección URL a la que enviarlos.
Los puntos importantes a tener en cuenta son los siguientes:
JSON-RPCjson contiene los metadatos del vídeo (esta parte se explica en detalle más adelante).videoFilename y videoFileAhora que hemos definido la clase de servlet UploadVideo, podemos utilizarlo en un formulario HTML simple. Vea el código del ejemplo funcional.
En este ejemplo, definimos una acción POST para nuestro servlet UploadVideo. El formulario también dispone de dos campos de entrada en los que puede especificar el nombre y la descripción del vídeo que carga, además de un tercer campo de entrada que permite buscar el archivo de vídeo en su sistema:
<FORM ENCTYPE="multipart/form-data" method="POST" action="http://localhost:8080/Library_API_Test/uploadvideo"> Nombre del vídeo: <INPUT TYPE="text" NAME="name" value="video name"/><br/> Descripción: <INPUT TYPE="text" NAME="desc" value="description"/><br/> Archivo: <INPUT TYPE="file" NAME="file" /> <INPUT TYPE="submit" VALUE="Upload"/> </FORM>
El botón de envío de formulario transfiere la entrada de formulario al servlet UploadVideo, que, como hemos comprobado, analiza la entrada, y configura y ejecuta el método create_video.
Si necesita ayuda para que sus vídeos se suban al servidor, el Servicio de Asistencia Técnica de Brightcove estará encantado de asesorarle. Puede enviar una solicitud de asistencia técnica aquí. Para que podamos darle una solución lo antes posible, le rogamos que tenga preparada la siguiente lista de requisitos.
Tras enviar su solicitud de asistencia técnica, recibirá por correo electrónico una confirmación procedente del Servicio de Asistencia Técnica de Brightcove. Puede proporcionar información adicional al Servicio de Asistencia Técnica de Brightcove respondiendo a dicho correo de confirmación.
Publicar nuevo comentario
Comentarios