Use flex and Java Servlets to upload files to the red5 Server

Source: Internet
Author: User

Use flex and Java Servlets to upload files to the red5 Server

Sample resources in this article

This article uses a demo to demonstrate how to use flex and Java Servlets to upload a local file of any type to the red5 server. The flex filereference interface is used to upload and download files on the remote server. The filereference class provides a dialog box interface and an upload method. In this dialog box, select a local file. The upload method calls PHP, ASP, or Java code on the remote server to upload files.
First, create a flex3 application that obtains the local file and calls the servlet of the red5 server "http: // localhost: 5080/red5fileuploadproj/fileupload.

The source code of uploadtored5proj. mxml is as follows:

<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:net="flash.net.*" layout="absolute" creationComplete="doInit()">  <mx:Panel horizontalCenter="0" verticalCenter="0" verticalAlign="middle" horizontalAlign="center" borderColor="#FFFFFF" width="100%" height="100%" backgroundColor="#307CB7">    <mx:Script>      <![CDATA[        import mx.collections.ArrayCollection;import mx.controls.Alert;[Bindable]private var fileReference:FileReference;[Bindable]private var fileSelected:Boolean = false;[Bindable]private var serverUrl:String = "http://localhost:5080/Red5FileUploadProj/fileupload";private var statusArray:Array = new Array(); [Bindable]private var statusArrayCollection:ArrayCollection = new ArrayCollection(); private function doInit():void{  fileReference = new FileReference();  fileReference.addEventListener(Event.SELECT, onFileSelect);  fileReference.addEventListener(Event.COMPLETE, onUploadComplete);  fileReference.addEventListener(ProgressEvent.PROGRESS,onUploadProgress);  fileReference.addEventListener(IOErrorEvent.IO_ERROR, onUploadError);  fileReference.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onUploadError);}private function browseFile(event:MouseEvent):void{  fileReference.browse();}private function onFileSelect(event:Event):void{  fileSelected = true;  fileTxt.text = fileReference.name;  statusArray.push({status:"Ready to upload "+fileTxt.text});  statusArrayCollection = new ArrayCollection(statusArray);}private function uploadFile(event:MouseEvent):void{  if (!fileSelected || (urlTxt.text.length == 0))  {    Alert.show("Select a file and Enter a URL");    return;  }  var urlRequest:URLRequest = new URLRequest(urlTxt.text);  fileReference.upload(urlRequest);}private function onUploadProgress(event:ProgressEvent):void{  statusArray.push({status:"In progress.."+((event.bytesLoaded * 100) / event.bytesTotal).toString()+"%"});  statusArrayCollection = new ArrayCollection(statusArray);}private function onUploadComplete(event:Event):void{          statusArray.push({status:"Uploaded successfully!"});  statusArrayCollection = new ArrayCollection(statusArray);}private function onUploadError(event:Event):void{  if (event is IOErrorEvent)  {    statusArray.push({status:"IO Error: "+(event as IOErrorEvent).text.toString()});    statusArrayCollection = new ArrayCollection(statusArray);  }  else if (event is SecurityErrorEvent)  {    statusArray.push({status:"Security Error: "+(event as IOErrorEvent).text.toString()});    statusArrayCollection = new ArrayCollection(statusArray);  }}      ]]>    </mx:Script>    <mx:VBox height="40%" width="30%" horizontalGap="0" horizontalAlign="left">      <mx:HBox height="10%" width="100%" horizontalAlign="left">        <mx:VBox height="100%" width="30%" horizontalAlign="left">          <mx:Label text="File name"></mx:Label>        </mx:VBox>        <mx:VBox height="100%" width="40%" horizontalAlign="left">          <mx:TextInput id="fileTxt" width="200" editable="false" toolTip="Select File to upload"/></mx:VBox><mx:VBox height="100%" width="30%" horizontalAlign="left">  <mx:Button id="browseBut" label="Browse" click="browseFile(event)" /></mx:VBox>      </mx:HBox>      <mx:HBox height="10%" width="100%" horizontalAlign="left">        <mx:VBox height="100%" width="30%" horizontalAlign="left">          <mx:Label text="Server URL"></mx:Label>        </mx:VBox><mx:VBox height="100%" width="70%" horizontalAlign="left">  <mx:TextInput id="urlTxt" width="290" text="{serverUrl}"/></mx:VBox>      </mx:HBox>      <mx:HBox height="10%" width="100%" horizontalAlign="center">        <mx:Button id="uploadBut" label="Upload file" click="uploadFile(event)" enabled="{fileSelected}" />      </mx:HBox>      <mx:HBox height="70%" width="100%" horizontalAlign="center">        <mx:DataGrid id="statusDG" width="100%" height="100%" dataProvider="{statusArrayCollection}" variableRowHeight="true" wordWrap="true">  <mx:columns>    <mx:DataGridColumn dataField="status" headerText="Upload Status" paddingLeft="0" paddingRight="0">    </mx:DataGridColumn>  </mx:columns>            </mx:DataGrid>      </mx:HBox>    </mx:VBox>  </mx:Panel></mx:Application>

The server-side Java Servlet Code uses an Apache third-party class library commons fileupload package, which enables our servlets or web applications to have the upload function. You can download this package from here: http://commons.apache.org/fileupload /. The commons fileupload package uses Apache internally.
Commons Io package, so we can also download this package: http://commons.apache.org/io /. In the example of this article, I am using commons-fileupload-1.2.1.jar and commons-io-1.4.jar. Copy commons-fileupload-1.2.1.jar, commons-io-1.4.jar, and servlet-api.jar to red5
Under the/WEB-INF/lib directory of the project. The servlet-api.jar can go to the Lib folder under the tomcat installation directory to find.

Then, add the following content to the Web. xml folder of our red5 application:

<servlet>          <servlet-name>fileupload</servlet-name>  <servlet-class>com.mycompany.ind.red5.FileUploadServlet</servlet-class>    <init-param>      <param-name>uploadFolder</param-name>      <param-value>uploads</param-value>    </init-param></servlet><servlet-mapping>  <servlet-name>fileupload</servlet-name>  <url-pattern>/fileupload</url-pattern></servlet-mapping>

If you are familiar with Jee, you will find the web with Tomcat. xml configuration is basically consistent: the servlet-mapping element will match the/fileupload URL to the servlet named "fileupload", and the servlet element will indicate the specific implementation class of the servlet; the uploaded folder name is also defined here as the initial servlet parameter. It is defined as "uploads", so we should create a folder with the same name under the root directory of our red5 project.

Finally, write the fileuploadservlet class for specific uploads:

package com.mycompany.ind.red5;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileItemFactory;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import java.io.IOException;import java.util.Iterator;import java.util.List;import java.io.FileOutputStream;import java.io.FileNotFoundException;public class FileUploadServlet extends HttpServlet{  @Override  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  {    super.doGet(request, response);    doPost(request,response);  }  @Override  public void doPost( HttpServletRequest request, HttpServletResponse response )  {    /**     * Create a factory for new disk-based file items     */    FileItemFactory factory = new DiskFileItemFactory();    /**     * Create a new file upload handler     */    ServletFileUpload upload = new ServletFileUpload(factory);    try    {      /**       * Parsing input request       */      List items = upload.parseRequest(request);      /**       * Process the uploaded items       */      Iterator iter = items.iterator();      while (iter.hasNext())       {        FileItem item = (FileItem) iter.next();       /** * handling a normal form-field */        if (item.isFormField())        {          System.out.println("A form field");                  } else {           /**    * handling file uploads    */          System.out.println("Not a form field");  String uploadFileName = item.getName();  byte[] data = item.get();  /**   * Gets directory to which the file is to be uploaded   */          String uploadFolder = getServletConfig().getInitParameter("uploadFolder");  String fileFolderName = getServletContext().getRealPath(uploadFolder + "\\"+uploadFileName);  try  {            FileOutputStream fileOutSt = new FileOutputStream(fileFolderName);    try    {      fileOutSt.write(data);      fileOutSt.close();    }            catch(IOException exception)    {      exception.printStackTrace();    }          }  catch(FileNotFoundException exception)  {            exception.printStackTrace();  }}      }    }    catch(FileUploadException exception)    {          exception.printStackTrace();    }  }}

If you have any questions, please contact us online. MSN: defonds # hotmail.com; email: defonds # 163.com( #= @).

Original blog address: http://tharas.wordpress.com/2009/12/20/upload-files-to-red5-server /.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.