使用 Flex 和Java servlets 将文件上传到 RED5 服务器的步骤
来源:互联网 发布:java 浅拷贝 编辑:程序博客网 时间:2024/04/29 10:26
本文示例资源下载地址
本文使用一个 demo 来演示如何使用 Flex 和 Java servlets 上传一个任意类型的本地文件到 RED5 服务器。使用的是 Flex 的 FileReference 接口,该接口可以对远程服务器上的文件进行上传、下载。FileReference 类提供了一个对话框接口和一个 upload 方法,通过该对话框,选择本地文件,而 upload 方法将会调用远程服务器端的 PHP,ASP 或者 Java 代码来进行上传。首先创建一个 Flex3 应用程序,该程序获得本地文件,并调用 RED5 服务器 "http://localhost:5080/Red5FileUploadProj/fileupload" 的 servlet。
UploadToRed5Proj.mxml 源代码如下:
- <?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>
服务器端的 Java Servlet 代码使用一个 Apache 的第三方类库 Commons FileUpload 包,它可以使我们的 servlets 或者 web 应用程序具有上传的功能。这个包可以从这里进行下载:http://commons.apache.org/fileupload/。Commons FileUpload 包内部使用了 Apache Commons IO 包,所以我们把这个包也下下来:http://commons.apache.org/io/。在本文的例子中,我使用的是 commons-fileupload-1.2.1.jar 和 commons-io-1.4.jar。将 commons-fileupload-1.2.1.jar、commons-io-1.4.jar 和 servlet-api.jar 复制到 RED5 项目的 /WEB-INF/lib 目录下。其中 servlet-api.jar 可以去 tomcat 安装目录下的 lib 文件夹下去找。
然后,在我们的 RED5 应用程序的 web.xml 文件夹下添加如下内容:
- <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>
如果你熟悉 JEE,你会发现和 tomcat 的 web.xml 配置基本一致:servlet-mapping 元素将匹配 /fileupload 的 url 到名为 "fileupload" 的 servlet,servlet 元素则指示出该 servlet 具体实现类;上传的文件夹名作为 servlet 的初始参数也在这里进行定义,这里定义为 "uploads",所以应该在我们的 RED5 项目根目录下创建一个同名文件夹。
最后,写具体实现上传的 FileUploadServlet 类:
- 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();
- }
- }
- }
- 使用 Flex 和Java servlets 将文件上传到 RED5 服务器的步骤
- 使用 Flex 和Java servlets 将文件上传到 RED5 服务器的步骤
- java将文件上传到ftp服务器
- flex上传excel文件到服务器上
- linux上传war文件到服务器的简要步骤
- red5服务器的使用
- 将red5集成到Tomcat服务器中
- 将文件通过http的post方法上传到服务器
- 将文件上传到网络共享服务器的方法
- 将文件上传到网络共享服务器的方法
- Java文件上传到服务器
- java上传文件到服务器
- Java上传文件到服务器
- 将文件上传到FTP服务器
- 将文件上传到服务器硬盘
- Flex中利用FileReference类的browse()和upload()函数选择并上传单个文件到Web服务器
- 将本地文件上传到远程FTP服务器和从远程FTP服务器下载文件到本地
- java上传文件到ftp服务器和ftp服务器的搭建
- 使用C/Delphi编写ShellCode
- ArcGIS 切图属性之DPI详解
- 长春被盗婴儿追踪:车辆已找到 车上无孩子
- 韩媒称中国巡逻舰艇进入韩国作战区域
- Hashmap不能用基本的数据类型 Dimensions expected after this token
- 使用 Flex 和Java servlets 将文件上传到 RED5 服务器的步骤
- asp.net下载文件几种方式
- 统计一篇文章中出现频率最高的汉字,java
- 如何在 64 位 linux 机器上安装 jdk1.6?
- 扩展easyui validatebox的两个方法.移除验证和还原验证
- C++ Primer 学习笔记(3)——表达式
- 如何在 Linux 服务器上安装 apache ant?
- C#加密方法汇总(转)
- 基础备忘之c++内存分布:代码段、全局数据区、栈、堆