Java-Beispiel: Hochladen von Videos

In diesem Artikel wird beschrieben, wie Sie eine HTML-Seite verwenden, um ein Video mittels Java und der Medien-Schreib-API in Ihre Medienbibliothek hochzuladen. Eine Servlet-Klasse verarbeitet das HTML-Formular und übergibt den Namen, die Beschreibung und die Datei des Videos aus dem Formular an die create_video-Methode.

Sie werden Beispielcode herunterladen und untersuchen, um zu erfahren, wie Sie ein Video mittels Java und der Medien-Schreib-API programmgesteuert hochladen und die Anwendung nach Bedarf anpassen können.

Bevor Sie beginnen

Das Beispiel besteht aus zwei Dateien:

  • Die UploadVideo.java-Datei definiert eine Servlet-Klasse, die die in einem Formular eingegebenen Daten an die create_video-Methode der Schreib-API übergibt.
  • Die uploadVideoForm.html-Datei stellt ein Formular bereit, in das der Benutzer den Namen, die Beschreibung und den Pfad des Videos eingeben kann. Über die Absenden-Schaltfläche des Formulars werden die eingegebenen Daten an das UploadVideo-Servlet übergeben.

Für die Arbeit mit dem Code in diesem Artikel sollten Sie mit Java-Servlets und der Formularverarbeitung vertraut sein.

In diesem Abschnitt werden folgende Lerninhalte behandelt:

Die UploadVideo-Servlet-Klasse

Die Servlet-Klasse nimmt das eingereichte Formular entgegen und formatiert die Daten für einen JSON-RPC-Aufruf an die Schreib-API. In diesem Beispiel wird die ClientHTTPRequest-Helperklasse aus der ClientHTTP-Bibliothek von Vlad Patryshev verwendet. Es erfordert die JAR-Dateien commons-io und commons-fileupload von Apache Commons.

Zunächst parst das Servlet die eingehenden POST-Daten aus dem HTML-Formular:

/* STEP 1. 
   Verarbeiten der vom Client erhaltenen Anforderung
 */
 
// Anforderung mithilfe der FileUpload-Bibliothek von Jakarta Commons parsen
// http://commons.apache.org/fileupload/
 
// Factory für datenträgerbasierte Dateielemente erstellen  
DiskFileItemFactory factory = new DiskFileItemFactory();
 
// Neue Prozedur für den Datei-Upload erstellen
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1000000000);
 
// Anforderung in DiskFileItems-Liste parsen
List items = upload.parseRequest(request);
 
// Die für die API-Anforderung benötigten Felder
String videoName = "";
String videoDescription = "";
File videoFile = null;
String videoFilename = "";
long videoMaxSize = 0;
 
// DiskFileItems-Liste per Iteration durchlaufen
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();
 
	}
}

In diesem Beispiel verwendet das Servlet eine Helper-Bibliothek von Jakarta Commons zum Parsen der Anforderung. Sie können jedoch auch eine eigene Bibliothek erstellen oder eine der zahlreichen Open-Source-Bibliotheken verwenden, die für diesen Zweck zur Verfügung stehen. Diese Bibliothek akzeptiert eine mehrteilige Datenmenge (wie von Upload-Formularen gesendet) und speichert die Daten in einer FileItems-Liste. Sie können die Metadatenfelder von den Dateifeldern trennen, indem Sie die Liste per Iteration durchlaufen.

Im nächsten Schritt werden die Metadaten in JSON codiert:

/* STEP 2. 
Assemble the JSON params
*/
 
String json = "{\"method\":\"create_video\"" +
          ", \"params\":{" +
          "\"token\":" + "12345asdfasdfa67898" + ", " +
          "\"video\":" + 
                "{\"name\":\"" +  videoName + "\", " +
                "\"shortDescription\":\"" + videoDescription + "\"}, " +
 
          "}}";

Beachten Sie die folgenden wichtigen Punkte:

  • Bei der Methode des Aufrufs handelt es sich um einen JSON-Parameter, nicht um einen Abfragestring, wie in einem GET-Aufruf.
  • params enthält ein Objekt mit zusätzlichen Argumenten für den Aufruf, wie Ihr Token und ein Videometadaten-Objekt.
  • Geben Sie im Videometadaten-Objekt die erforderlichen name- und shortDescription-Eigenschaften sowie wahlweise andere zulässige Eigenschaften an, wie zum Beispiel tags, relatedLink und economics.

Im letzten Schritt übernimmt das Servlet den JSON-String und die Dateidaten und sendet die Daten mithilfe von POST an die Schreib-API. Sehen Sie sich im letzten Codeabschnitt des Servlets die Struktur des Aufrufs, mit dem das Video hochgeladen wird, genauer an:

// URL für die API definieren
String targetURL = "http://api.brightcove.com/services/post";
            
// Erforderliches params-Objekt erstellen für...
Object[] params;
if(videoFile == null) {
  params = new Object[] { "JSON-RPC", json };
} else {
  params = new Object[] {
        "JSON-RPC", json,
        videoFilename, videoFile
  }; 
}              
            
// ... die ClientHTTPRequest-Helperklasse aus der ClientHTTP-Bibliothek von Vlad Patryshev
// http://www.devx.com/Java/Article/17679/1954?pf=true

InputStream in = ClientHttpRequest.post( new java.net.URL(targetURL), params );

In diesem Teil des Servlets wird eine Helper-Bibliothek verwendet, um die Erstellung der HTTP-Anforderung zu vereinfachen, da der Netzwerk-Stack in Java auf sehr niedriger Ebene arbeitet. Bei Verwendung dieser Bibliothek müssen Sie nur ein Objekt mit Parametern sowie die URL für das POST-Ziel angeben.

Beachten Sie die folgenden wichtigen Punkte:

  • Das Servlet führt eine Anforderung des Typs JSON-RPC durch.
  • Der json-String enthält die Metadaten für dieses Video (dies wird später ausführlicher erläutert).
  • videoFilename und videoFile sind die hochgeladenen Dateien.

Hochladen mithilfe eines HTML-Formulars

Nun können Sie die definierte UploadVideo-Servlet-Klasse in einem einfachen HTML-Formular einsetzen. Sehen Sie sich den Code des praktischen Beispiels an.

In diesem Beispiel definieren wir eine POST-Aktion für das UploadVideo-Servlet. Dieses Formular enthält auch zwei Eingabefelder zur Angabe des Namens und der Beschreibung des hochgeladenen Videos. Außerdem steht ein drittes Eingabefeld zur Verfügung, über das Sie die Videodatei in Ihrem Dateisystem suchen können:

<FORM ENCTYPE="multipart/form-data" method="POST" 
  action="http://localhost:8080/Library_API_Test/uploadvideo">
  Videoname: <INPUT TYPE="text" NAME="name" value="video name"/><br/>
  Beschreibung: <INPUT TYPE="text" NAME="desc" value="description"/><br/>
  Datei:	<INPUT TYPE="file" NAME="file" />
  <INPUT TYPE="submit" VALUE="Upload"/>
</FORM>

Über die Absenden-Schaltfläche des Formulars werden die eingegebenen Daten an das UploadVideo-Servlet übergeben. Das Servlet ist dann dafür zuständig, die Eingabe zu parsen und die create_video-Methode einzurichten und aufzurufen.

Weitere Hilfe

Falls Sie für die ordnungsgemäße Wiedergabe Ihrer Videos Hilfe benötigen, können Sie den Brightcove-Support nutzen. Sie können hier eine Anfrage übermitteln. Um sicherzustellen, dass Sie schnellstmöglich eine Antwort erhalten, ist unten in einer Liste aufgeführt, was der Support für die Problemlösung benötigt.

  • Die Dateigröße
  • Die Hochlademethode (Standard, beschleunigt, FTP, Schreib-API)
  • Der Dateiname und die Erweiterung
  • Wird der Upload angehalten, bevor er 100 % erreicht?
  • Erreicht der Upload 100% und wird ein Fehler generiert? Falls ein Fehler generiert wird, senden Sie bitte einen Screenshot (bevorzugt) oder den Text der Fehlermeldung.

Nach dem Übermitteln Ihres Falls erhalten Sie eine Bestätigungs-E-Mail vom Brightcove-Support. Antworten Sie auf die Bestätigungs-E-Mail, wenn Sie dem Brightcove-Support weitere Informationen zu Ihrem Fall zukommen lassen möchten.

Kommentar hinzufügen

The content of this field is kept private and will not be shown publicly.
0

Kommentare