包 | flash.net |
类 | public class FileReference |
继承 | FileReference EventDispatcher Object |
子类 | File |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
FileReference 实例的创建方式如下:
new
运算符与 FileReference 构造函数一起使用时:var myFileReference = new FileReference();
FileReferenceList.browse()
方法时,该方法将创建一个 FileReference 对象数组。
在上载操作期间,FileReference 对象的所有属性通过调用 FileReference.browse()
或 FileReferenceList.browse()
方法来填充。在下载操作期间,name
属性在调度 select
事件时得到填充,所有其它属性在调度 complete
事件时得到填充。
browse()
方法打开一个操作系统对话框,提示用户选择要上载的文件。FileReference.browse()
方法允许用户选择一个文件;FileReferenceList.browse()
方法允许用户选择多个文件。成功调用 browse()
方法后,调用 FileReference.upload()
方法以每次上载一个文件。FileReference.download()
方法提示用户提供文件的保存位置并开始从远程 URL 进行下载。
FileReference 类和 FileReferenceList 类不允许为 browse()
或 download()
生成的对话框设置默认文件位置。对话框中显示的默认位置是最近浏览过的文件夹(如果可以确定该位置)或桌面。这些类不允许对已传输的文件进行读取或写入。它们也不允许启动上载或下载的 SWF 文件访问已上载或下载的文件或用户磁盘上文件的位置。
FileReference 类和 FileReferenceList 类也不提供用于身份验证的方法。通过要求身份验证的服务器,您可以使用 Flash ® Player 浏览器插件下载文件,但上载(在所有播放器上)和下载(在独立播放器或外部播放器上)将失败。对 FileReference 事件进行侦听可确定操作是否成功完成,并进行错误处理。
对于在 Flash Player 中运行的内容或在 Adobe AIR 中的应用程序安全沙箱以外的区域运行的内容,上载和下载操作只能访问所在域和 URL 策略文件指定的任何域中的文件。如果启动上载或下载的内容与文件服务器不在相同的域中,则需要将策略文件放到文件服务器上。
请注意,由于已向 Flash Player 中添加了新功能,因此当发布到 Flash Player 10 时,一次只可以激活下列操作中的一个操作:FileReference.browse()
、FileReference.upload()
、FileReference.download()
、FileReference.load()
、FileReference.save()
。否则,Flash Player 会引发运行时错误(代码 2174)。使用 FileReference.cancel()
可停止正在进行的操作。此限制仅适用于 Flash Player 10。早期版本的 Flash Player 在同时进行多个操作时不会受到此限制的影响。
调用 FileReference.browse()
、FileReferenceList.browse()
或 FileReference.download()
方法的过程中,对于 Linux 和 Mac OS X 10.1 及早期版本,将暂停 Flash Player 的独立和外部版本中以及 AIR 中的 SWF 文件播放
如果未指定任何参数,则 Flash Player 会向服务器端脚本发送以下范例 HTTP POST
请求:
POST /handler.cfm HTTP/1.1 Accept: text/* Content-Type: multipart/form-data; boundary=----------Ij5ae0ae0KM7GI3KM7 User-Agent: Shockwave Flash Host: www.example.com Content-Length: 421 Connection: Keep-Alive Cache-Control: no-cache ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="Filename" MyFile.jpg ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="Filedata"; filename="MyFile.jpg" Content-Type: application/octet-stream FileDataHere ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="Upload" Submit Query ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7--
如果用户指定参数 "api_sig"
、"api_key"
和 "auth_token"
,Flash Player 将发送以下 HTTP POST
请求:
POST /handler.cfm HTTP/1.1 Accept: text/* Content-Type: multipart/form-data; boundary=----------Ij5ae0ae0KM7GI3KM7 User-Agent: Shockwave Flash Host: www.example.com Content-Length: 421 Connection: Keep-Alive Cache-Control: no-cache ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="Filename" MyFile.jpg ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="api_sig" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="api_key" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="auth_token" XXXXXXXXXXXXXXXXXXXXXX ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="Filedata"; filename="MyFile.jpg" Content-Type: application/octet-stream FileDataHere ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 Content-Disposition: form-data; name="Upload" Submit Query ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7--
另请参见
属性 | 定义方 | ||
---|---|---|---|
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
creationDate : Date [只读 (read-only)] 本地磁盘上文件的创建日期。 | FileReference | ||
creator : String [只读 (read-only)] 文件的 Macintosh 创建者类型,此类型仅用于 Mac OS X 之前的 Mac OS 版本中。 | FileReference | ||
data : ByteArray [只读 (read-only)] 成功调用 load() 方法之后代表所加载文件中的数据的 ByteArray 对象。 | FileReference | ||
extension : String [只读 (read-only)] 文件扩展名。 | FileReference | ||
modificationDate : Date [只读 (read-only)] 本地磁盘上文件的上一次修改日期。 | FileReference | ||
name : String [只读 (read-only)] 本地磁盘上的文件的名称。 | FileReference | ||
prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object | ||
size : Number [只读 (read-only)] 本地磁盘上文件的大小(以字节为单位)。 | FileReference | ||
type : String [只读 (read-only)] 文件类型。 | FileReference |
方法 | 定义方 | ||
---|---|---|---|
创建新的 FileReference 对象。 | FileReference | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void 使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。 | EventDispatcher | ||
显示一个文件浏览对话框,让用户选择要上载的文件。 | FileReference | ||
取消正在对该 FileReference 对象执行的任何上载或下载操作。 | FileReference | ||
将事件调度到事件流中。 | EventDispatcher | ||
打开对话框,以允许用户从远程服务器下载文件。 | FileReference | ||
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。 | EventDispatcher | ||
指示对象是否已经定义了指定的属性。 | Object | ||
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
开始加载用户选择的本地文件。 | FileReference | ||
指示指定的属性是否存在、是否可枚举。 | Object | ||
从 EventDispatcher 对象中删除侦听器。 | EventDispatcher | ||
打开一个对话框,允许用户将文件保存到本地文件系统。 | FileReference | ||
设置循环操作动态属性的可用性。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
upload(request:URLRequest, uploadDataFieldName:String = "Filedata", testUpload:Boolean = false):void 开始将用户选择的文件上载到远程服务器。 | FileReference | ||
启动将文件上载到 URL 的操作,不进行任何编码。 | FileReference | ||
返回指定对象的原始值。 | Object | ||
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。 | EventDispatcher |
事件 | 摘要 | 定义方 | ||
---|---|---|---|---|
[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。 | EventDispatcher | |||
当用户通过文件浏览对话框取消文件上载或下载时调度。 | FileReference | |||
当下载操作完成或上载操作生成 HTTP 状态代码 200 时调度。 | FileReference | |||
[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。 | EventDispatcher | |||
在 upload() 或 uploadUnencoded() 方法调用尝试通过 HTTP 访问数据,并且 Adobe AIR 可以检测并返回请求的状态代码时调度。 | FileReference | |||
当上载失败并且存在可用来描述失败的 HTTP 状态代码时调度。 | FileReference | |||
当上载或下载失败时调度。 | FileReference | |||
当上载或下载操作开始时调度。 | FileReference | |||
在文件上载或下载操作期间定期调度。 | FileReference | |||
当对 FileReference.upload() 或 FileReference.download() 方法的调用尝试将文件上载到调用方安全沙箱外部的服务器,或是从调用方安全沙箱外部的服务器上下载文件时进行调度。 | FileReference | |||
当用户从文件浏览对话框选择要上载或下载的文件时调度。 | FileReference | |||
成功上载并从服务器接收数据之后调度。 | FileReference |
creationDate | 属性 |
creationDate:Date
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
本地磁盘上文件的创建日期。如果未填充对象,则为获取此属性的值而执行的调用将返回 null
。
public function get creationDate():Date
IllegalOperationError —
若 FileReference.browse() 、FileReferenceList.browse() 或 FileReference.download() 方法未能成功调用,将引发异常,同时显示一条信息,指出函数的调用顺序不正确或先前调用未成功。此时,creationDate 属性的值为 null 。
| |
IOError — 若不能访问文件信息,则会引发一个异常,同时显示一条信息,指出发生文件 I/O 错误。 |
另请参见
creator | 属性 |
creator:String
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
文件的 Macintosh 创建者类型,此类型仅用于 Mac OS X 之前的 Mac OS 版本中。在 Windows 或 Linux 中,此属性为 null
。如果未填充 FileReference 对象,则为获得此属性的值而执行的调用将返回 null
。
public function get creator():String
IllegalOperationError —
在 Macintosh 系统上,若 FileReference.browse() 、FileReferenceList.browse() 或 FileReference.download() 方法未能成功调用,将引发异常,同时显示一条信息,指出函数的调用顺序不正确或先前调用未成功。此时,creator 属性的值为 null 。
|
另请参见
data | 属性 |
data:ByteArray
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
成功调用 load()
方法之后代表所加载文件中的数据的 ByteArray 对象。
public function get data():ByteArray
IllegalOperationError —
如果 load() 方法未能成功调用,则将引发异常,同时显示一条消息,指示函数的调用顺序不正确或先前调用未成功。在这种情况下,data 属性的值为 null 。
| |
IOError —
如果无法打开或读取文件,或者在访问文件时遇到类似错误,则将引发异常,同时显示一条消息,指示发生文件 I/O 错误。在这种情况下,data 属性的值为 null 。
|
另请参见
extension | 属性 |
extension:String
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
文件扩展名。
文件的扩展名是最后一个句点(“.”)后面的名称部分(不包括句点)。如果文件名中没有句点,则 extension 为 null
。
注意:应该使用 extension
属性来确定文件的类型,不要使用 creator
或 type
属性。应该将 creator
和 type
属性视为已不推荐使用。它们适用于 Mac OS 的早期版本。
public function get extension():String
IllegalOperationError — 如果未初始化引用。 |
modificationDate | 属性 |
modificationDate:Date
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 9, Flash Player 9 |
本地磁盘上文件的上一次修改日期。如果未填充 FileReference 对象,则为获得此属性的值而执行的调用将返回 null
。
public function get modificationDate():Date
IllegalOperationError —
若 FileReference.browse() 、FileReferenceList.browse() 或 FileReference.download() 方法未能成功调用,将引发异常,同时显示一条信息,指出函数的调用顺序不正确或先前调用未成功。此时,modificationDate 属性的值为 null 。
| |
IOError — 若不能访问文件信息,则会引发一个异常,同时显示一条信息,指出发生文件 I/O 错误。 |
另请参见
name | 属性 |
name:String
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
本地磁盘上的文件的名称。如果未填充 FileReference 对象(通过对 FileReference.download()
或 FileReference.browse()
的有效调用),则在尝试获取此属性的值时,Flash Player 将引发错误。
FileReference 对象的所有属性都通过调用 browse()
方法进行填充。与其它 FileReference 属性不同,如果调用 download()
方法,则在调度 select
事件时将填充 name
属性。
public function get name():String
IllegalOperationError —
若 FileReference.browse() 、FileReferenceList.browse() 或 FileReference.download() 方法未能成功调用,将引发异常,同时显示一条信息,指出函数的调用顺序不正确或先前调用未成功。
|
另请参见
size | 属性 |
size:Number
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
本地磁盘上文件的大小(以字节为单位)。如果 size
为 0,将引发异常。
注意:在 ActionScript 3.0 的初始版本中,size
属性定义为 uint 对象,该对象支持大小达 4 GB 的文件。现在,它以 Number 对象的形式实现,以支持更大的文件。
public function get size():Number
IllegalOperationError —
若 FileReference.browse() 、FileReferenceList.browse() 或 FileReference.download() 方法未能成功调用,将引发异常,同时显示一条信息,指出函数的调用顺序不正确或先前调用未成功。
| |
IOError — 若无法打开或读取文件,或者在访问文件时遇到类似错误,将引发异常,同时显示一条信息,指明发生文件 I/O 错误。 |
另请参见
type | 属性 |
type:String
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
文件类型。
在 Windows 或 Linux 上,此属性是文件扩展名。在 Macintosh 上,此属性是由四个字符组成的文件类型,仅用于 Mac OS X 之前的 Mac OS 版本中。如果未填充 FileReference 对象,则为获取此属性的值而执行的调用将返回 null
。
对于 Windows、Linux 和 Mac OS X,文件扩展名 - name
属性最后一个句点 (.) 字符后的部分character — 标识文件类型。
public function get type():String
IllegalOperationError —
若 FileReference.browse() 、FileReferenceList.browse() 或 FileReference.download() 方法未能成功调用,将引发异常,同时显示一条信息,指出函数的调用顺序不正确或先前调用未成功。此时,type 属性的值为 null 。
|
另请参见
FileReference | () | 构造函数 |
public function FileReference()
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
创建新的 FileReference 对象。在填充后,FileReference 对象表示用户本地磁盘上的文件。
另请参见
browse | () | 方法 |
public function browse(typeFilter:Array = null):Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
显示一个文件浏览对话框,让用户选择要上载的文件。该对话框对于用户的操作系统来说是本机的。用户可以选择本地计算机上的文件,也可以选择其它系统上的文件,例如,通过 Windows 上的 UNC 路径选择文件。
当调用此方法并且用户成功选择文件时,会使用该文件的属性填充此 FileReference 对象的属性。以后每次调用 FileReference.browse()
方法时,FileReference 对象的属性都重置为用户在对话框中选择的文件。每次只能执行一个 browse()
或 download()
会话(因为每次只能调用一个对话框)。
使用 typeFilter
参数,可决定对话框显示哪些文件。
在 Flash Player 10 和 Flash Player 9 Update 5 中,只有响应用户事件(例如,在鼠标单击或按键事件的事件处理函数中)才能成功调用此方法。否则,调用此方法将导致 Flash Player 引发 Error 异常。
请注意,由于已向 Flash Player 中添加了新功能,因此当发布到 Flash Player 10 时,一次只可以激活下列操作中的一个操作:FileReference.browse()
、FileReference.upload()
、FileReference.download()
、FileReference.load()
、FileReference.save()
。否则,Flash Player 会引发运行时错误(代码 2174)。使用 FileReference.cancel()
可停止正在进行的操作。此限制仅适用于 Flash Player 10。早期版本的 Flash Player 在同时进行多个操作时不会受到此限制的影响。
参数
typeFilter:Array (default = null ) —
一个 FileFilter 实例数组,用于过滤在对话框中显示的文件。如果省略此参数,则显示所有文件。有关详细信息,请参阅 FileFilter 类。
|
Boolean —
如果参数有效并且打开了文件浏览对话框,则返回 true 。
|
select: — 当用户从浏览文件选择器成功选择了项目时调度。 | |
cancel: — 当用户取消文件上载浏览窗口时调度。 |
IllegalOperationError — 在以下情况下引发:1) 另一个 FileReference 或 FileReferenceList 浏览会话正在进行中;每次仅能执行一个文件浏览会话。2) 用户 mms.cfg 文件中的某个设置禁止此操作。 | |
ArgumentError —
如果 typeFilter 数组包含格式不正确的 FileFilter 对象,将引发异常。有关 FileFilter 对象正确格式的信息,请参阅 FileFilter 类。
| |
Error — 为了响应用户动作(如鼠标事件或按键事件),将不会调用此方法。 |
另请参见
cancel | () | 方法 |
public function cancel():void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
取消正在对该 FileReference 对象执行的任何上载或下载操作。调用此方法并不会调度 cancel
事件。仅在用户通过退出文件上载或下载对话框来取消操作时,才会调度该事件。
download | () | 方法 |
public function download(request:URLRequest, defaultFileName:String = null):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
打开对话框,以允许用户从远程服务器下载文件。虽然 Flash Player 没有限制可上载或下载的文件的大小,但是播放器正式支持的上载或下载文件大小最大为 100 MB。
download()
方法首先打开一个操作系统对话框,让用户输入文件名并在本地计算机上选择用于保存文件的位置。用户选择了位置并确认下载操作时(例如,单击“保存”)后,开始从远程服务器下载。侦听器接收事件来指示下载的进度、成功或失败。为了在调用 download()
后确定对话框和下载操作的状态, 代码必须对 cancel
、open
、progress
和 complete
等事件进行侦听。
FileReference.upload()
和 FileReference.download()
函数是非阻塞式的。这些函数在调用它们之后即返回,而不会等待文件传输完成。此外,若 FileReference 对象离开作用域,则对该对象尚未完成的上载或下载操作将在它离开作用域后被取消。只要希望上载或下载操作继续,就应确保将 FileReference 对象保留在作用域中。
成功下载文件之后,将使用本地文件的属性填充 FileReference 对象的属性。如果下载成功,将调度 complete
事件。
每次只能执行一个 browse()
或 download()
会话(因为每次只能调用一个对话框)。
此方法支持使用 HTTP 或 HTTPS 下载任何文件类型。
无法连接到常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 编程》一书的中的“限制网络 API”。
注意:如果服务器要求用户身份验证,则只有在浏览器中运行的 SWF 文件(即使用浏览器插件或 ActiveX 控件的文件)才可以提供对话框来提示用户输入用户名和密码以进行身份验证,并且只适用于下载。对于使用插件或 ActiveX 控件进行的上载操作,以及使用独立或外部播放器进行的上载和下载操作,文件传输会失败。
当在应用程序安全沙箱以外的安全沙箱的内容中使用此方法时,请考虑 Flash Player AIR 安全模型:
object
和 embed
标签的 allowNetworking
参数,防止 SWF 文件使用此方法。
但在 Adobe AIR 中,应用程序
安全沙箱中的内容(使用 AIR 应用程序安装的内容)不受这些安全限制的约束。
有关安全性的详细信息,请参阅以下部分:
请注意,由于已向 Flash Player 中添加了新功能,因此当发布到 Flash Player 10 时,一次只可以激活下列操作中的一个操作:FileReference.browse()
、FileReference.upload()
、FileReference.download()
、FileReference.load()
、FileReference.save()
。否则,Flash Player 会引发运行时错误(代码 2174)。使用 FileReference.cancel()
可停止正在进行的操作。此限制仅适用于 Flash Player 10。早期版本的 Flash Player 在同时进行多个操作时不会受到此限制的影响。
参数
request:URLRequest —
URLRequest 对象。URLRequest 对象的 url 属性应包含要下载到本地计算机的文件的 URL。若此参数为 null ,将引发异常。URLRequest 对象的 requestHeaders 属性将被省略;上载或下载时不支持自定义 HTTP 请求标头。要向服务器发送 POST 或 GET 参数,请将 URLRequest.data 的值设置为您的参数,并将 URLRequest.method 设置为 URLRequestMethod.POST 或 URLRequestMethod.GET 。
在某些浏览器上,URL 字符串长度受限。在某些浏览器或服务器上,长度超过 256 个字符的字符串可能失败。 | |
defaultFileName:String (default = null ) —
对话框中显示的要下载文件的默认文件名。此字符串不能包含以下字符:/ \ : * ? " < > | %
如果省略此参数,将分析出远程 URL 的文件名并用作默认文件名。 |
open: — 当下载操作开始时调度。 | |
progress: — 在文件下载操作期间进行定期调度。 | |
complete: — 当文件下载操作成功完成时调度。 | |
cancel: — 当用户取消对话框时调度。 | |
select: — 当用户从对话框中选择要下载的文件时调度。 | |
securityError: — 当由于安全错误导致下载失败时调度。 | |
ioError: — 由于下列任一原因而调度:
|
IllegalOperationError —
在以下情况下引发:1) 另一个浏览会话正在进行中;每次仅能执行一个文件浏览会话。2) 传递给 request 的值不包含有效的路径或协议。3) 要下载的文件的名称中包含禁止使用的字符。4) 用户 mms.cfg 文件中的某个设置禁止此操作。
| |
SecurityError — 本地不受信任的内容可能无法与 Internet 进行通信。要避免这种情况,请将此 SWF 文件重新分类为只能与远程内容交互或受信任。引发此异常时会显示一条消息,指明由于本地文件安全性限制而不允许访问的文件名和 URL。 | |
SecurityError —
如果尝试连接到常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 编程》一书的“安全性”一章中的“限制网络 API”。
| |
ArgumentError —
如果 url.data 为 ByteArray 类型,将引发异常。 当与 FileReference.upload() 和 FileReference.download() 方法一起使用时,url.data 只能为 URLVariables 或 String 类型。
| |
MemoryError —
发生此错误的原因有:1) Flash Player 无法将 URLRequest.data 参数从 UTF8 转换为 MBCS。如果传递给 FileReference.download() 方法的 URLRequest 对象设置为执行 GET 操作并且 System.useCodePage 设置为 true ,将发生该错误。2) Flash Player 无法为 POST 数据分配内存。如果传递给 FileReference.download() 方法的 URLRequest 对象设置为执行 POST 操作,将发生该错误。
| |
Error — 为了响应用户动作(如鼠标事件或按键事件),将不会调用此方法。 |
另请参见
download
事件对象的用法。 要运行此示例,请将 downloadURL.url
属性更改为指向一个实际的域和文件,而不是虚拟的 http://www.[yourDomain].com/SomeFile.pdf。您可能还需要编译 SWF 文件,将“本地回放安全性”设置为“只访问网络”,或更新 Flash Player 的安全设置,以允许此文件网络访问。
package { import flash.display.Sprite; import flash.events.*; import flash.net.FileReference; import flash.net.URLRequest; import flash.net.FileFilter; public class FileReference_download extends Sprite { private var downloadURL:URLRequest; private var fileName:String = "SomeFile.pdf"; private var file:FileReference; public function FileReference_download() { downloadURL = new URLRequest(); downloadURL.url = "http://www.[yourDomain].com/SomeFile.pdf"; file = new FileReference(); configureListeners(file); file.download(downloadURL, fileName); } private function configureListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.CANCEL, cancelHandler); dispatcher.addEventListener(Event.COMPLETE, completeHandler); dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); dispatcher.addEventListener(Event.OPEN, openHandler); dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); dispatcher.addEventListener(Event.SELECT, selectHandler); } private function cancelHandler(event:Event):void { trace("cancelHandler: " + event); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } private function openHandler(event:Event):void { trace("openHandler: " + event); } private function progressHandler(event:ProgressEvent):void { var file:FileReference = FileReference(event.target); trace("progressHandler name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function selectHandler(event:Event):void { var file:FileReference = FileReference(event.target); trace("selectHandler: name=" + file.name + " URL=" + downloadURL.url); } } }
load | () | 方法 |
public function load():void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
开始加载用户选择的本地文件。虽然 Flash Player 没有限制可上载、下载、加载或保存的文件的大小,但其正式支持的文件大小最大为 100 MB。对于 Flash Player 中运行的内容,必须先调用 FileReference.browse()
或 FileReferenceList.browse()
方法,然后再调用 load()
方法。不过,应用程序沙箱中运行于 AIR 中的内容调用 File 对象的 load()
方法之前不必先调用 browse()
方法。(AIR File 类扩展了 FileReference 类。)
侦听器接收事件来指示加载的进度、成功或失败。尽管可以使用 FileReferenceList 对象让用户选择多个要加载的文件,但仍必须逐个加载这些文件。若要逐个加载文件,请遍历 FileReference 对象的 FileReferenceList.fileList
数组。
FileReference.upload()
、FileReference.download()
、FileReference.load()
和 FileReference.save()
函数均不分块。这些函数在调用之后即返回,而不会等待文件传输完成。此外,如果 FileReference 对象离开作用域,则该对象中尚未完成的任何事务将在离开作用域时被取消。只要希望上载、下载、加载或保存能继续,就应确保将 FileReference 对象保留在作用域中。
如果文件成功完成加载,则其内容将作为字节数组存储在 FileReference 对象的 data
属性中。
有以下安全事项需要注意:
object
和 embed
标签的 allowNetworking
参数,防止 SWF 文件使用此方法。
不过,这些注意事项不适用于应用程序沙箱中的 AIR 内容。
请注意,当发布到 Flash Player 10 或 AIR 1.5 时,一次只能激活以下操作中的一项:FileReference.browse()
、FileReference.upload()
、FileReference.download()
、FileReference.load()
、FileReference.save()
。否则,应用程序将引发运行时错误(代码 2174)。使用 FileReference.cancel()
可停止正在进行的操作。此限制仅适用于 Flash Player 10 和 AIR 1.5。对同时多项操作的这种限制不影响 Flash Player 或 AIR 的早期版本。
open: — 在加载操作开始时调度。 | |
progress: — 在文件加载操作期间定期调度。 | |
complete: — 在文件加载操作成功完成时调度。 | |
ioError: — 在应用程序读取或写入文件期间由于发生输入/输出错误而导致加载失败时调用。 |
IllegalOperationError — 在以下情况下引发:1) 另一个 FileReference 或 FileReferenceList 浏览会话正在进行中;每次仅能执行一个文件浏览会话。 2) 用户 mms.cfg 文件中的某个设置禁止此操作。 | |
MemoryError — 如果应用程序无法为文件分配内存,则可能会发生此错误。文件可能太大,或者可用的内存可能太小。 |
另请参见
save | () | 方法 |
public function save(data:*, defaultFileName:String = null):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
打开一个对话框,允许用户将文件保存到本地文件系统。虽然 Flash Player 没有限制可上载、下载、加载或保存的文件的大小,但是播放器正式支持的文件大小最大为 100 MB。
save()
方法首先打开一个操作系统对话框,让用户输入文件名并在本地计算机上选择用于保存文件的位置。当用户选择了位置并确认保存操作时(例如通过单击“保存”),保存过程即会开始。侦听器接收事件来指示保存操作的进度、成功或失败。为了在调用 save()
后确定对话框和保存操作的状态,ActionScript 代码必须对 cancel
、open
、progress
和 complete
等事件进行侦听。
FileReference.upload()
、FileReference.download()
、FileReference.load()
和 FileReference.save()
函数均不分块。这些函数在调用之后即返回,而不会等待文件传输完成。此外,如果 FileReference 对象离开作用域,则该对象中尚未完成的任何事务将在离开作用域时被取消。只要希望上载、下载、加载或保存能继续,就应确保将 FileReference 对象保留在作用域中。
在成功保存文件之后,将使用本地文件的属性填充 FileReference 对象的属性。如果保存成功,将调度 complete
事件。
每次只能执行一个 browse()
或 save()
会话(因为每次只能调用一个对话框)。
在 Flash Player 中,只有在响应用户事件(例如,在鼠标单击或按键事件的事件处理函数中)时才能成功调用此方法。否则,调用此方法将导致 Flash Player 引发 Error 异常。此限制不适用于应用程序沙箱中的 AIR 内容。
参数
data:* —
要保存的数据。数据可以采用几种格式之一,并将进行适当处理:
| |
defaultFileName:String (default = null ) —
对话框中显示的要保存文件的默认文件名。此字符串不能包含以下字符:/ \ : * ? " < > | %
在 Flash Player 中,如果省略此参数,则在默认情况下,文件名将为空白。如果 File 对象调用此方法,则文件名将为 File 对象所引用文件的名称。(AIR File 类扩展了 FileReference 类。) |
open: — 当下载操作开始时调度。 | |
progress: — 在文件下载操作期间进行定期调度。 | |
complete: — 当文件下载操作成功完成时调度。 | |
cancel: — 当用户取消对话框时调度。 | |
select: — 当用户从对话框中选择要下载的文件时调度。 | |
ioError: — 读取或传输文件期间发生输入/输出错误时调度。 |
IllegalOperationError — 在以下情况下引发:1) 另一个浏览会话正在进行中;每次仅能执行一个文件浏览会话。2) 要下载的文件的名称中包含禁止使用的字符。3) 用户 mms.cfg 文件中的某个设置禁止此操作。 | |
ArgumentError —
如果 data 的类型不是 ByteArray,并且不具有 toString() 方法,则将引发异常。如果 data 的类型不是 XML,并且不具有 toXMLString() 方法,则将引发异常。
| |
Error — 为了响应用户动作(如鼠标事件或按键事件),将不会调用此方法。 | |
MemoryError — 如果 Flash Player 无法为该文件分配内存,则可能会发生此错误。文件可能太大,或者可用的内存可能太小。 |
另请参见
upload | () | 方法 |
public function upload(request:URLRequest, uploadDataFieldName:String = "Filedata", testUpload:Boolean = false):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
开始将用户选择的文件上载到远程服务器。虽然 Flash Player 没有限制可上载或下载的文件的大小,但是播放器正式支持的上载或下载文件大小最大为 100 MB。调用此方法之前,必须先调用 FileReference.browse()
或 FileReferenceList.browse()
方法。
侦听器接收事件来指示上载的进度、成功或失败。尽管可以使用 FileReferenceList 对象让用户选择多个要上载的文件,但必须逐个上载文件。为此,需遍历由 FileReference 对象组成的 FileReferenceList.fileList
数组。
FileReference.upload()
和 FileReference.download()
函数是非阻塞式的。这些函数在调用它们之后即返回,而不会等待文件传输完成。此外,若 FileReference 对象离开作用域,则对该对象尚未完成的上载或下载操作将在它离开作用域后被取消。只要希望上载或下载操作继续,就应确保将 FileReference 对象保留在作用域中。
文件上载到在 url
参数中传递的 URL。该 URL 必须是配置为接受上载的服务器脚本。Flash Player 使用 HTTP POST
方法上载文件。处理上载的服务器脚本应收到包含下列元素的 POST
请求:
Content-Type
,属于 multipart/form-data
Content-Disposition
,其 name
属性默认情况下设置为 "Filedata"
,filename
属性设置为原始文件的名称
无法连接到常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 编程》一书的中的“限制网络 API”。
对于范例 POST
请求,请参阅有关 uploadDataFieldName
参数的描述。可以使用 upload()
方法向服务器发送 POST
或 GET
参数,请参阅有关 request
参数的描述。
如果 testUpload
参数为 true
,并且要上载的文件大于约 10 KB,则基于 Windows 的 Flash Player 在上载实际的文件之前,会先发送不带内容的测试上载 POST
操作,以验证传输操作是否可能成功。之后,Flash Player 会再次发送 POST
操作,这时其中将包含实际的文件内容。对于小于 10 KB 的文件,Flash Player 则仅执行一次上载 POST
操作,其中包含要上载的实际文件内容。基于 Macintosh 的 Flash Player 不执行测试上载 POST
操作。
注意:如果服务器要求用户身份验证,则只有在浏览器中运行的 SWF 文件(即使用浏览器插件或 ActiveX 控件的文件)才可以提供对话框来提示用户输入用户名和密码以进行身份验证,并且只适用于下载。对于使用插件或 ActiveX 控件进行的上载操作,以及使用独立或外部播放器进行的上载和下载操作,文件传输会失败。
当在应用程序安全沙箱以外的安全沙箱的内容中使用此方法时,请考虑 Flash Player AIR 安全模型:
object
和 embed
标签的 allowNetworking
参数,防止 SWF 文件使用此方法。
但在 Adobe AIR 中,application
安全沙箱中的内容(使用 AIR 应用程序安装的内容)不受这些安全限制的约束。
有关详细信息,请参阅以下部分:
请注意,由于已向 Flash Player 中添加了新功能,因此当发布到 Flash Player 10 时,一次只可以激活下列操作中的一个操作:FileReference.browse()
、FileReference.upload()
、FileReference.download()
、FileReference.load()
、FileReference.save()
。否则,Flash Player 会引发运行时错误(代码 2174)。使用 FileReference.cancel()
可停止正在进行的操作。此限制仅适用于 Flash Player 10。早期版本的 Flash Player 在同时进行多个操作时不会受到此限制的影响。
参数
request:URLRequest —
URLRequest 对象,URLRequest 对象的 url 属性应包含特定服务器脚本的 URL,该服务器脚本被配置为通过 HTTP POST 调用处理上载。在某些浏览器上,URL 字符串长度受限。在某些浏览器或服务器上,长度超过 256 个字符的字符串可能失败。若此参数为 null ,将引发异常。URLRequest 对象的 requestHeaders 属性将被省略;上载或下载时不支持自定义 HTTP 请求标头。
该 URL 可以是 HTTP,或者为了安全地进行上载,也可以是 HTTPS。 若要使用 HTTPS,请在
要向服务器发送 | |
uploadDataFieldName:String (default = "Filedata ") —
在上载 POST 操作中位于文件数据之前的字段名。uploadDataFieldName 值必须为非空字符串。默认情况下,uploadDataFieldName 的值为 "Filedata" ,如下面的范例 POST 请求所示:
Content-Type: multipart/form-data; boundary=AaB03x --AaB03x Content-Disposition: form-data; name="Filedata"; filename="example.jpg" Content-Type: application/octet-stream ... contents of example.jpg ... --AaB03x-- | |
testUpload:Boolean (default = false ) —
请求上载测试文件的设置。如果 testUpload 为 true ,则对于大于 10 KB 的文件,Flash Player 将尝试进行内容长度为 0 的测试文件上载 POST 。测试上载将检查实际文件上载是否可能成功,以及服务器身份验证(如果需要)是否可能成功。测试上载仅适用于 Windows 播放器。
|
open: — 当上载操作开始时调度。 | |
progress: — 在文件上载操作期间进行定期调度。 | |
complete: — 当文件上载操作成功完成时调度。 | |
uploadCompleteData: — 成功上载文件并从服务器接收数据之后调度。 | |
securityError: — 由于安全错误导致上载失败时调度。 | |
httpStatus: — 由于 HTTP 错误导致上载失败时调度。 | |
httpResponseStatus: — 上载操作成功完成,服务器返回响应 URL 和响应标头。 | |
ioError: — 在下列任一情况下调用:
|
SecurityError — 本地不受信任的 SWF 文件可能无法与 Internet 进行通信。要避免这种情况,请将此 SWF 文件重新分类为只能与远程内容交互或受信任。引发此异常时会附带一个消息,指明不允许访问的本地文件和 URL 的名称。 | |
SecurityError —
如果尝试连接到常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 编程》一书的“安全性”一章中的“限制网络 API”。
| |
IllegalOperationError —
在以下情况下引发:1) 另一个 FileReference 或 FileReferenceList 浏览会话正在进行中;每次仅能执行一个文件浏览会话。 2) URL 参数为无效的路径或协议。文件上载必须使用 HTTP 协议,文件下载则必须使用 FTP 或 HTTP 协议。3) uploadDataFieldName 参数设置为 null 。4) 用户 mms.cfg 文件中的某个设置禁止此操作。
| |
ArgumentError —
在以下情况下引发:1) uploadDataFieldName 参数为空字符串。2) url.data 为 ByteArray 类型。当与 FileReference.upload() 和 FileReference.download() 方法一起使用时,url.data 只能为 URLVariables 或 String 类型。3) 在 AIR 运行时中(在应用程序安全沙箱中),URLRequest 的方法不是 GET 和 POST(而是使用 uploadEncoded() )。
| |
MemoryError —
发生此错误的原因有:1) Flash Player 无法将 URLRequest.data 参数从 UTF8 转换为 MBCS。如果传递给 FileReference.upload() 的 URLRequest 对象设置为执行 GET 操作并且 System.useCodePage 设置为 true ,将发生该错误。2) Flash Player 无法为 POST 数据分配内存。如果传递给 FileReference.upload() 的 URLRequest 对象设置为执行 POST 操作,将发生该错误。
|
另请参见
uploadUnencoded | () | 方法 |
public function uploadUnencoded(request:URLRequest):void
运行时版本: | AIR 1.0 |
启动将文件上载到 URL 的操作,不进行任何编码。由于 upload()
方法会在 form-data 封套中对文件进行编码,因此 uploadUnencoded()
方法会在 HTTP 请求正文中按原样传递文件内容。如果要发送的数据已编码为接收服务器能够理解的格式,请使用 uploadUnencoded() 方法。uploadeUnencoded()
方法通常与 HTTP/WebDAV PUT
方法一起使用。
参数
request:URLRequest —
URLRequest 对象,URLRequest 对象的 url 属性应包含特定服务器脚本的 URL,该服务器脚本被配置为通过 HTTP POST 调用处理上载。在某些浏览器上,URL 字符串长度受限。在某些浏览器或服务器上,长度超过 256 个字符的字符串可能失败。若此参数为 null ,将引发异常。
该 URL 可以是 HTTP,或者为了安全地进行上载,也可以是 HTTPS。若要使用 HTTPS,请在
要向服务器发送 |
open: — 当上载操作开始时调度。 | |
progress: — 在文件上载操作期间进行定期调度。 | |
complete: — 当文件上载操作成功完成时调度。 | |
uploadCompleteData: — 成功上载文件并从服务器接收数据之后调度。 | |
securityError: — 由于安全错误导致上载失败时调度。 | |
httpStatus: — 由于 HTTP 错误导致上载失败时调度。 | |
httpResponseStatus: — 上载操作成功完成,服务器返回响应 URL 和响应标头。 | |
ioError: — 在下列任一情况下调用:
|
SecurityError — 本地不受信任的 SWF 文件可能无法与 Internet 进行通信。要避免这种情况,请将此 SWF 文件重新分类为只能与远程内容交互或受信任。引发此异常时会附带一个消息,指明不允许访问的本地文件和 URL 的名称。 | |
IllegalOperationError — 在以下情况下引发:1) 另一个 FileReference 或 FileReferenceList 浏览会话正在进行中;每次仅能执行一个文件浏览会话。2) URL 参数为无效的路径或协议。文件上载必须使用 HTTP。 |
另请参见
cancel | 事件 |
flash.events.Event
flash.events.Event.CANCEL
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
当用户通过文件浏览对话框取消文件上载或下载时调度。如果用户通过其它方式(关闭浏览器或停止当前应用程序)取消上载或下载,则 Flash Player 不会调度该事件。
Event.CANCEL
常量定义 cancel
事件对象的 type
属性的值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 对已取消其操作的对象的引用。 |
cancel
事件对象的用法。要运行此示例,请将 downloadURL.url
属性更改为指向一个实际的域和文件,而不是虚拟的 http://www.[yourDomain].com/SomeFile.pdf。您可能还需要编译 SWF 文件,将“本地回放安全性”设置为“只访问网络”,或更新 Flash Player 的安全设置,以允许此文件网络访问。
package { import flash.display.Sprite; import flash.events.*; import flash.net.FileReference; import flash.net.URLRequest; public class FileReference_event_cancel extends Sprite { private var downloadURL:URLRequest; private var fileName:String = "SomeFile.pdf"; private var file:FileReference; public function FileReference_event_cancel() { downloadURL = new URLRequest(); downloadURL.url = "http://www.[yourDomain].com/SomeFile.pdf"; file = new FileReference(); file.addEventListener(Event.CANCEL, cancelHandler); file.download(downloadURL, fileName); } private function cancelHandler(event:Event):void { trace("cancelHandler: " + event); } } }
complete | 事件 |
flash.events.Event
flash.events.Event.COMPLETE
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
当下载操作完成或上载操作生成 HTTP 状态代码 200 时调度。对于文件下载操作,在 Flash Player 或 Adobe AIR 将整个文件下载到磁盘上时调度此事件。对于文件上载操作,在 Flash Player 或 Adobe AIR 接收到 HTTP 状态代码 200(来自接收传输的服务器)之后调度此事件。
Event.COMPLETE
常量定义 complete
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 已完成加载的网络对象。 |
complete
事件对象的用法。要运行此示例,请将 downloadURL.url
属性更改为指向一个实际的域和文件,而不是虚拟的 http://www.[yourDomain].com/SomeFile.pdf。您可能还需要编译 SWF 文件,将“本地回放安全性”设置为“只访问网络”,或更新 Flash Player 的安全设置,以允许此文件网络访问。
package { import flash.display.Sprite; import flash.events.*; import flash.net.FileReference; import flash.net.URLRequest; public class FileReference_event_complete extends Sprite { private var downloadURL:URLRequest; private var fileName:String = "SomeFile.pdf"; private var file:FileReference; public function FileReference_event_complete() { downloadURL = new URLRequest(); downloadURL.url = "http://www.[yourDomain].com/SomeFile.pdf"; file = new FileReference(); configureListeners(file); file.download(downloadURL, fileName); } private function configureListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.CANCEL, cancelHandler); dispatcher.addEventListener(Event.COMPLETE, completeHandler); dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); dispatcher.addEventListener(Event.OPEN, openHandler); dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); dispatcher.addEventListener(Event.SELECT, selectHandler); } private function cancelHandler(event:Event):void { trace("cancelHandler: " + event); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } private function openHandler(event:Event):void { trace("openHandler: " + event); } private function progressHandler(event:ProgressEvent):void { var file:FileReference = FileReference(event.target); trace("progressHandler name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function selectHandler(event:Event):void { var file:FileReference = FileReference(event.target); trace("selectHandler: name=" + file.name + " URL=" + downloadURL.url); } } }
另请参见
httpResponseStatus | 事件 |
flash.events.HTTPStatusEvent
flash.events.HTTPStatusEvent.HTTP_RESPONSE_STATUS
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, AIR 1.0 |
在 upload()
或 uploadUnencoded()
方法调用尝试通过 HTTP 访问数据,并且 Adobe AIR 可以检测并返回请求的状态代码时调度。
httpStatus
事件不同,httpResponseStatus
事件在传送任何响应数据之前传送。此外,httpResponseStatus
事件还包括 responseHeaders
和 responseURL
属性的值(对于 httpStatus
,这些属性未定义)。请注意,在发送任何 complete
或 error
事件之前还将发送 httpResponseStatus
(如果有)。
HTTPStatusEvent.HTTP_RESPONSE_STATUS
常量定义 httpResponseStatus
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
responseURL
| 从中返回响应的 URL。 |
responseHeaders
| 响应以 URLRequestHeader 对象的数组形式返回的响应标头。 |
status
| 由服务器返回的 HTTP 状态代码。 |
target
| 接收 HTTP 状态代码的网络对象。 |
另请参见
httpStatus | 事件 |
flash.events.HTTPStatusEvent
flash.events.HTTPStatusEvent.HTTP_STATUS
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
当上载失败并且存在可用来描述失败的 HTTP 状态代码时调度。调度 httpStatus
事件之后,将调度 ioError
事件。
仅在上载失败时才调度 httpStatus
事件。对于在 Flash Player 中运行的内容,此事件不适用于下载失败。如果下载由于 HTTP 错误而失败,则将错误报告为 I/O 错误。
HTTPStatusEvent.HTTP_STATUS
常量定义 httpStatus
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
status
| 由服务器返回的 HTTP 状态代码。 |
target
| 接收 HTTP 状态代码的网络对象。 |
另请参见
ioError | 事件 |
flash.events.IOErrorEvent
flash.events.IOErrorEvent.IO_ERROR
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
当上载或下载失败时调度。文件传输会失败的原因有:
upload()
方法中的 url
参数的值包含无效协议。有效协议包括 HTTP 和 HTTPS。
重要说明:只有在浏览器中运行的应用程序(即,使用浏览器插件或 ActiveX 控件的应用程序)和在 Adobe AIR 中运行的内容才可以提供对话框来提示用户输入用户名和密码以进行身份验证,并且只适用于下载。对于使用插件或 ActiveX 控件版本的 Flash Player 进行的上载操作,以及使用独立播放器或外部播放器进行的上载或下载操作,文件传输将失败。
定义ioError
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
errorID
| 与特定错误关联的引用编号(仅限 AIR)。 |
target
| 发生输入/输出错误的网络对象。 |
text
| 要显示为错误消息的文本。 |
另请参见
open | 事件 |
flash.events.Event
flash.events.Event.OPEN
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
当上载或下载操作开始时调度。
Event.OPEN
常量用于定义 open
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 已打开连接的网络对象。 |
download
事件对象的用法。要运行此示例,请将 downloadURL.url
属性更改为指向一个实际的域和文件,而不是虚拟的 http://www.[yourDomain].com/SomeFile.pdf。您可能还需要编译 SWF 文件,将“本地回放安全性”设置为“只访问网络”,或更新 Flash Player 的安全设置,以允许此文件网络访问。
package { import flash.display.Sprite; import flash.events.*; import flash.net.FileReference; import flash.net.URLRequest; import flash.net.FileFilter; public class FileReference_download extends Sprite { private var downloadURL:URLRequest; private var fileName:String = "SomeFile.pdf"; private var file:FileReference; public function FileReference_download() { downloadURL = new URLRequest(); downloadURL.url = "http://www.[yourDomain].com/SomeFile.pdf"; file = new FileReference(); configureListeners(file); file.download(downloadURL, fileName); } private function configureListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.CANCEL, cancelHandler); dispatcher.addEventListener(Event.COMPLETE, completeHandler); dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); dispatcher.addEventListener(Event.OPEN, openHandler); dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); dispatcher.addEventListener(Event.SELECT, selectHandler); } private function cancelHandler(event:Event):void { trace("cancelHandler: " + event); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } private function openHandler(event:Event):void { trace("openHandler: " + event); } private function progressHandler(event:ProgressEvent):void { var file:FileReference = FileReference(event.target); trace("progressHandler name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function selectHandler(event:Event):void { var file:FileReference = FileReference(event.target); trace("selectHandler: name=" + file.name + " URL=" + downloadURL.url); } } }
另请参见
progress | 事件 |
flash.events.ProgressEvent
flash.events.ProgressEvent.PROGRESS
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在文件上载或下载操作期间定期调度。progress
事件在 Flash Player 将字节传输到服务器时调度,即使传输最终没有成功,也会在传输期间定期调度。要确定文件传输是否真正成功和完成以及何时真正成功和完成,需要侦听 complete
事件。
在某些情况下,接收不到 progress
事件。例如,当所传输的文件非常小或者上载或下载速度非常快时,可能就不会调度 progress
事件。
在低于 OS X 10.3 版本的 Macintosh 平台上不能确定文件上载进度。progress
事件在上载操作期间调用,但 progress 事件的 bytesLoaded
属性值为 -1,表示不能确定进度。
progress
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
bytesLoaded
| 在侦听器处理事件时加载的项数或字节数。 |
bytesTotal
| 如果加载进程成功,最终将加载的项目或字节总数。 |
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 报告进度的 对象。 |
progress
事件的用法。要运行此示例,请将 downloadURL.url
属性更改为指向一个实际的域和文件,而不是虚拟的 http://www.[yourDomain].com/SomeFile.pdf。您可能还需要编译 SWF 文件,将“本地回放安全性”设置为“只访问网络”,或更新 Flash Player 的安全设置,以允许此文件网络访问。
package { import flash.display.Sprite; import flash.events.*; import flash.net.FileReference; import flash.net.URLRequest; public class FileReference_event_progress extends Sprite { private var downloadURL:URLRequest; private var fileName:String = "SomeFile.pdf"; private var file:FileReference; public function FileReference_event_progress() { downloadURL = new URLRequest(); downloadURL.url = "http://www.[yourDomain].com/SomeFile.pdf"; file = new FileReference(); file.addEventListener(ProgressEvent.PROGRESS, progressHandler); file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); file.addEventListener(Event.COMPLETE, completeHandler); file.download(downloadURL, fileName); } private function progressHandler(event:ProgressEvent):void { var file:FileReference = FileReference(event.target); trace("progressHandler: name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } } }
另请参见
securityError | 事件 |
flash.events.SecurityErrorEvent
flash.events.SecurityErrorEvent.SECURITY_ERROR
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
当对 FileReference.upload()
或 FileReference.download()
方法的调用尝试将文件上载到服务器,或是从调用方安全沙箱外部的服务器上下载文件时进行调度。用于描述发生的特定错误的文本属性的值通常为 "securitySandboxError"
。执行调用的 SWF 可能已经尝试访问其域外部的 SWF 文件,但却无权这样做。 您可以通过使用 URL 策略文件来尝试纠正此错误。
在 Adobe AIR 中,这些安全限制不适用于应用程序安全沙箱中的内容。
在 Adobe AIR 中,这些安全限制不适用于应用程序安全沙箱中的内容。
SecurityErrorEvent.SECURITY_ERROR
常量定义 securityError
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 报告安全错误的网络对象。 |
text
| 要显示为错误消息的文本。 |
另请参见
select | 事件 |
flash.events.Event
flash.events.Event.SELECT
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
当用户从文件浏览对话框选择要上载或下载的文件时调度。(调用 FileReference.browse()
、FileReferenceList.browse()
或 FileReference.download()
方法时将打开此对话框。)当用户选择文件并确认操作(例如,通过单击“确定”)时,会填充 FileReference 对象的属性。
对于在 Flash Player 内运行的内容或在 Adobe AIR 运行时中、但在应用程序安全沙箱以外运行的内容,select
事件的行为方式略有不同,具体取决于调用该事件的方法。在调用 browse()
后调度 select
事件时,Flash Player 或 AIR 应用程序能够读取 FileReference 对象的所有属性,因为用户所选的文件位于本地文件系统上。在调用 download()
后发生 select
事件时,Flash Player 或 AIR 应用程序只能读取 name
属性,因为在调度 select
事件时,文件尚未下载到本地文件系统。如果已下载了文件,则调度 complete
事件时,Flash Player 或 AIR 应用程序可以读取 FileReference 对象的所有其他属性。
Event.SELECT
常量定义 select
事件对象的 type
属性的值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 对象,已在其中选定了一个项目。 |
select
事件对象的用法。要运行此示例,请将 uploadURL.url
属性更改为指向一个实际的域和文件,而不是虚拟的 http://www.[yourDomain].com/SomeFile.pdf。您可能还需要编译 SWF 文件,将“本地回放安全性”设置为“只访问网络”,或更新 Flash Player 的安全设置,以允许此文件网络访问。要想可以从桌面运行这个示例,您的服务器还需要发送 crossdomain.xml 文件。如果触发了 ioErrorHandler()
函数,可能需要使用一个有效的 URL 来更新提供的 uploadURL
,此有效的 URL 被配置成接收上载。
package { import flash.display.Sprite; import flash.events.*; import flash.net.FileReference; import flash.net.URLRequest; public class FileReference_event_select extends Sprite { private var uploadURL:URLRequest; private var file:FileReference; public function FileReference_event_select() { uploadURL = new URLRequest(); uploadURL.url = "http://www.[yourDomain].com/yourUploadHandlerScript.cfm"; file = new FileReference(); file.addEventListener(Event.SELECT, selectHandler); file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); file.addEventListener(ProgressEvent.PROGRESS, progressHandler); file.addEventListener(Event.COMPLETE, completeHandler); file.browse(); } private function selectHandler(event:Event):void { var file:FileReference = FileReference(event.target); trace("selectHandler: name=" + file.name + " URL=" + uploadURL.url); file.upload(uploadURL); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } private function progressHandler(event:ProgressEvent):void { var file:FileReference = FileReference(event.target); trace("progressHandler: name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } } }
uploadCompleteData | 事件 |
flash.events.DataEvent
flash.events.DataEvent.UPLOAD_COMPLETE_DATA
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9.0.28.0 |
成功上载然后从服务器接收数据之后调度。如果未从服务器返回数据,则不调度此事件。
定义uploadCompleteData
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
data
| 成功上载文件后从服务器返回的原始数据。 |
target
| 成功上载后接收数据的 FileReference 对象。 |
注意:若要运行此示例,请更改 uploadURL.url 属性以指向实际的 URL,而不是示例中虚拟的地址。URL 应指向名为 yourUploadHandlerScript.cfm
的文件,该文件位于指定 URL 的根 Web 目录下。根据您的配置,您可能还需要编译 SWF 文件,将“本地回放安全性”设置为“只访问网络”,或更新 Flash Player 的安全设置,以允许此文件网络访问。
package { import flash.display.Sprite; import flash.events.*; import flash.net.FileFilter; import flash.net.FileReference; import flash.net.URLRequest; public class FileReferenceExample extends Sprite { private var uploadURL:URLRequest; private var file:FileReference; public function FileReferenceExample() { uploadURL = new URLRequest(); uploadURL.url = "http://www.[yourDomain].com/yourUploadHandlerScript.cfm"; file = new FileReference(); configureListeners(file); file.browse(getTypes()); } private function configureListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.CANCEL, cancelHandler); dispatcher.addEventListener(Event.COMPLETE, completeHandler); dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); dispatcher.addEventListener(Event.OPEN, openHandler); dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); dispatcher.addEventListener(Event.SELECT, selectHandler); dispatcher.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadCompleteDataHandler); } private function getTypes():Array { var allTypes:Array = new Array(getImageTypeFilter(), getTextTypeFilter()); return allTypes; } private function getImageTypeFilter():FileFilter { return new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png"); } private function getTextTypeFilter():FileFilter { return new FileFilter("Text Files (*.txt, *.rtf)", "*.txt;*.rtf"); } private function cancelHandler(event:Event):void { trace("cancelHandler: " + event); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function uploadCompleteDataHandler(event:DataEvent):void { trace("uploadCompleteData: " + event); } private function httpStatusHandler(event:HTTPStatusEvent):void { trace("httpStatusHandler: " + event); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } private function openHandler(event:Event):void { trace("openHandler: " + event); } private function progressHandler(event:ProgressEvent):void { var file:FileReference = FileReference(event.target); trace("progressHandler name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function selectHandler(event:Event):void { var file:FileReference = FileReference(event.target); trace("selectHandler: name=" + file.name + " URL=" + uploadURL.url); file.upload(uploadURL); } } }