12.4.7 上传文件

来源:互联网 发布:帆船鞋 知乎 编辑:程序博客网 时间:2024/06/05 03:15

  经常需要在FlashPlayer中提供文件的上传功能,例如用户的自定义头像,联系人列表,点播的歌曲等。FileReference类提供了在用户计算机和服务器之间上载和下载文件的方法。

利用FileReference类的构造函数“FileReference()”创建新的FileReference对象。该构造函数不需要参数。当FileReference对象建立后,如果在代码中调用FileReference.browse()方法,则FlashPlayer在执行时会显示一个文件浏览对话框,这是一个系统提供的对话框,在WindowsXPMacX中不会相同。只要文件浏览对话框被显示,brow()方法便返回,且提示返回值true。一个FlashPlayer只能显示一个文件浏览对话框,如果连续使用代码呼叫文件选择对话框,则后续请求不能成功执行。

。文件的选择和浏览必然是异步的,因为没有道理在等待用户选择文件时,停止Flash的播放和运行。最终用户根据自己的习惯使用该文件浏览对话框,选择一个所需的文件。当用户单击“确认”按钮后,文件浏览对话框关闭,文件的信息被存储在FileReference中。此时,FlashPlayer获得了用户选择的文件,将发出。Event.SELECT事件,如果用户取消了文件浏览,则发出Event.CANCEL事件

当用户单击“确认”按钮后,FileReference对象仅提供所选文件的属性信息。利用FileReference对象的属性查询这些信息,这些属性信息都是只读的:

Ø         name:String[read-only]文件名称。

Ø         size:uint[read-only]文件大小。

Ø         type:String[read-only]文件类型。

Ø         creationDate:Date[read-only]磁盘文件的创建日期。

Ø         creator:String[read-only]文件创建者。

Ø         modificationDate:Date[read-only]修改日期。

出于安全的考虑,FlashPlayer不允许开发者在代码中遍历客户端的磁盘结构,因此不能指派文件按浏览对话框的地址。FlashPlayer永远不能获知用户磁盘的分区情况和目录结构,也不能获知用户选择的文件的具体内容。

下面的代码演示了brow()方法的用法:

var fileselect:FileReference=new FileReference();

fileselect.addEventListener(Event.SELECTuserselect);

fileselect.browse();

 

function userselect(eve:Event):void

{

         //输出选择文件的信息

         trace(fileselect.name);

         trace(fileselect.type);

         trace(fileselect.size);

         trace(fileselect.creator);

         trace(fileselect.creationDate);

}

如果选择磁盘上的一个文件,代码将输出结果:

filename.srt

.srt

26100

jack audi

Sun Mar 2 19:44:06 GMT+0800 2008

在文件名中,不包含路径和磁盘信息。

在获得用户选择之后,就可以调用upload()方法上传该文件。播放器正式支持的上载或下载文件大小最大为100MB,为了避免浪费,应在代码中检查FileReference对象的size属性。

调用upload()方法,需要指定上传路径和存储文件名。

upload(

         request:URLRequest

         uploadDataFieldName:String = "Filedata"

          testUpload:Boolean = false

         ):void 

请在第一个参数中,利用URLRequest.url指派存储文件的路径和文件名。如果是安全连接,请使用相应的https属性。

参数uploadDataFieldName并不是上传文件的存储名,而是上载POST操作中位于文件数据之前的字段名。uploadDataFieldName值必须为非空字符串。默认情况下,uploadDataFieldName的值为"Filedata"

如果testUploadtrue,则对于大于10KB的文件,FlashPlayer将尝试进行内容长度为0的测试文件上载POST。测试上载仅适用于Windows版本的播放器。测试上载将检查实际文件上载是否可能成功,以及服务器身份验证(如果需要)是否可能成功。

调用upload()方法后,数据开始上传。监听以下信息,追踪上传的状态:

Ø         open:Event—当上载操作开始时调度。

Ø         progress:ProgressEvent—在文件上载操作期间进行定期调度。

Ø         complete:Event—当文件上载操作成功完成时调度。

Ø         uploadCompleteData:Event—成功上载文件并从服务器接收数据之后调度。如果服务器端没有返回信息的操作,该事件不会被触发。

在上载过程中,不能关闭FlashPlayer,否则上载会失败。如果再上载操作过程中,调用cancel()方法,将会取消FileReference对象的上载操作。

原创粉丝点击