了解文件上传的Flash Player 10安全模型

了解文件上传的Flash Player 10安全模型,flash,security,file-upload,Flash,Security,File Upload,我一直在读Flash Player 10中文件上传的安全限制。根据,上传不必由用户发起的操作触发(browse()会触发,但这是另一回事)。如果是这样的话,那么多文件上传会给用户带来尴尬的体验,因为一次只能进行一次上传——因此用户必须对每个文件单击(或按下按钮)一次来启动上传,但只有在上一个文件上传完后才可以 另一方面,《公约》规定: 在Flash Player 10及更高版本中,如果使用多部分内容类型(用于 示例“多部分/表单数据”),其中包含上载(由 文章中“内容处置”标题中的“filena

我一直在读Flash Player 10中文件上传的安全限制。根据,上传不必由用户发起的操作触发(browse()会触发,但这是另一回事)。如果是这样的话,那么多文件上传会给用户带来尴尬的体验,因为一次只能进行一次上传——因此用户必须对每个文件单击(或按下按钮)一次来启动上传,但只有在上一个文件上传完后才可以

另一方面,《公约》规定:

在Flash Player 10及更高版本中,如果使用多部分内容类型(用于 示例“多部分/表单数据”),其中包含上载(由 文章中“内容处置”标题中的“filename”参数 主体),后操作受适用于的安全规则的约束 上载:

必须执行POST操作以响应用户发起的请求 操作,如鼠标单击或按键。

证实URLLoader文档(请参阅“发布API”部分)

但是,原始版本并没有说明这一点——只是FileReference浏览必须响应用户启动的操作,而不是(可能由URLLoader驱动的)上载本身:

当SWF文件使用FileReference.browse()和 方法将文件上载到服务器Flash 玩家执行两项安全规则:

  • FileReference.browse()必须从用户事件处理程序(鼠标或键盘事件)中调用
[……]

Flash Player在任何时间强制执行这些规则 调用networking API以执行向服务器显示的POST 要包含上载,请执行以下操作

从实际使用URLLoader API上传文件的情况来看,上传确实不需要来自用户发起的操作;但是,这是因为我使用的是播放器的调试版本,还是因为文档错误?(还是别的什么?)


TL;DR:文档包含相互冲突的信息,我不相信我的现场测试(面对那些说测试不可行的文档)URLLoader可以在没有用户交互的情况下上载文件吗?还是仅用于文件引用?(这将扼杀大多数文件预处理的可能性,这正是我所感兴趣的!)

我相信Adobe希望拥有它,这样您就无法在没有交互的情况下使用URLLoader上载文件。我只是认为他们没有以最好的方式完成这项工作,您可以根据使用URLLoader上载文件的具体方式来解决这一问题(如果您在文章中为URLLoader添加了一个文件名,它应该会出错,但您可以通过Base64编码文件并将其与URLLoader一起发送到php来解决这一问题)


看一看。请通读其中的评论,它们似乎也解决了这个问题。希望这会有所帮助。

您没有错误,因为您正在调试中运行。在我的speedtest项目中遇到同样的问题
所以对于问题:

  • FileReference
    无法在没有用户交互的情况下上载文件。

  • 如果您使用的是
    POST
    multipart/form data
    filename
    属性,则
    urloader
    无法在没有用户交互的情况下上载文件

  • 如果您使用的是
    application/octet stream
    之类的内容类型,并将文件体编码(例如base64)放入post请求中,则可以使用
    urloader
    上载文件。这意味着,如果您使用的是PHP,那么您将不会使用
    $\u文件
    ,而是使用
    $\u POST
    数组来获取文件

  • 在本地计算机上以调试模式工作时,不会触发
    URLLoader
    限制错误


啊,这是因为调试播放器!但是,据我所知,FileReference可以在没有用户交互的情况下上传文件(它只是无法浏览)。我讨厌双重标准。正如你在问题中所说的,根据adobe.com,在
FileReference.Upload()
之前必须调用
FileReference.browse()
。是的,我理解:-),但假设用户单击“浏览”按钮,通过
FileReferenceList
选择17个文件。这17个文件无需进一步的用户交互即可上传。但是,如果我们想在上传它们之前以某种方式修改它们(比如,在客户端调整图像文件的大小),那么用户必须再点击17次,每次点击一次来启动(URLLoader)上传。这就是我所说的双重标准。当然,如果有可接受的解决方法(比如Base64编码),没有人会强迫用户点击17次,事实并非如此。我使用的是MultiPowerUpload,所以上传需要2次点击,第一次是浏览,然后你可以管理图像,比如裁剪或调整大小,然后第二次点击上传所有图像。如果你愿意,我会发布一些代码,它是如何制作的。当然,我真的很好奇你是怎么做到的!(我能想到的唯一方法是立即开始所有上传。)