FileReference 类提供了在用户计算机和服务器之间上载和下载文件的方法。操作系统对话框会提示用户选择要上载的文件或用于下载的位置。每个 FileReference 对象都引用用户磁盘上的一个文件并且具有一些属性,这些属性包含有关文件大小、类型、名称、创建日期、修改日期和创建者类型(仅限 Macintosh)的信息。
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--