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--