使用 Flex 和Java servlets 将文件上传到 RED5 服务器的步骤
2012-06-06 17:16
393 查看
使用 Flex 和Java servlets 将文件上传到 RED5 服务器的步骤本文示例资源下载地址
本文使用一个 demo 来演示如何使用 Flex 和 Java servlets 上传一个任意类型的本地文件到 RED5 服务器。使用的是 Flex 的 FileReference 接口,该接口可以对远程服务器上的文件进行上传、下载。FileReference 类提供了一个对话框接口和一个 upload 方法,通过该对话框,选择本地文件,而 upload 方法将会调用远程服务器端的 PHP,ASP 或者 Java 代码来进行上传。
首先创建一个 Flex3 应用程序,该程序获得本地文件,并调用 RED5 服务器 "http://localhost:5080/Red5FileUploadProj/fileupload" 的 servlet。
UploadToRed5Proj.mxml 源代码如下:
服务器端的 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 文件夹下添加如下内容:
如果你熟悉 JEE,你会发现和 tomcat 的 web.xml 配置基本一致:servlet-mapping 元素将匹配 /fileupload 的 url 到名为 "fileupload" 的 servlet,servlet 元素则指示出该 servlet 具体实现类;上传的文件夹名作为 servlet 的初始参数也在这里进行定义,这里定义为 "uploads",所以应该在我们的 RED5 项目根目录下创建一个同名文件夹。
最后,写具体实现上传的 FileUploadServlet 类:
如有问题,欢迎和作者进行在线交流,MSN:defonds#hotmail.com;email:defonds(at)163(dot)com。
博客原文地址:http://tharas.wordpress.com/2009/12/20/upload-files-to-red5-server/。
本文使用一个 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(); } } }
如有问题,欢迎和作者进行在线交流,MSN:defonds#hotmail.com;email:defonds(at)163(dot)com。
博客原文地址:http://tharas.wordpress.com/2009/12/20/upload-files-to-red5-server/。
相关文章推荐
- 使用 Flex 和Java servlets 将文件上传到 RED5 服务器的步骤
- 使用 Flex 和Java servlets 将文件上传到 RED5 服务器的步骤
- JAVA使用apache commons-fileupload组件完成文件上传到服务器功能
- 【文件上传】uploadify插件配合java的使用,可以图片,按照步骤可以复制粘贴直接运行,2017年
- 使用java进行sftp上传文件到服务器
- Java使用SFTP连接服务器上传、下载文件
- java使用Linux命令scp从远程服务器上传下载文件
- java使用FTPClient 上传图片文件到服务器
- Java中使用FTPClient向FTP服务器上传文件、下载文件
- 关于使用FTP上传文件到服务器的小总结-java
- Java使用SFTP上传文件到服务器的简单使用
- 阿里云 云解析使用方法/在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程
- 使用C#作为客户端的PHP服务器上传文件
- java web - 使用ajax的文件上传
- 使用structs上传文件到服务器
- fastdfs 图片服务器 使用java端作为客户端上传图片 / 【FastDFS专题】fastdfs使用实战(概念篇)
- Java使用FTP上传文件被损坏的问题
- java上传文件到远程服务器(二)---HttpClient方式
- 使用TCP协议写一个可以上传文件的服务器和客户端
- 在Java中使用pscp命令上传单个或者多个文件(文件夹)到远程Linux服务器