我需要在Web服务调用完成后调用FileReference.save(),但此方法有一个限制:"在Flash Player中,您只能成功调用此方法以响应用户事件(例如,在事件处理程序中)用于鼠标单击或按键事件.)否则,调用此方法会导致Flash Player抛出错误异常." (来自此处的文档)
这种限制有点模糊.这是否意味着我只能从事件处理函数中调用FileReference.save()方法,该函数被注册为某些类型的用户事件的侦听器?如果是,那么究竟哪些用户事件有效?(也许有一个事件永远不会被用户与我的应用程序交互调度,我可以为该事件类型注册一个事件处理函数,并从该函数中调用save()?)
我的困难是我无法安全地调用FileReference.save()方法,直到我的Web服务返回将用作FileReference.save()方法调用的参数的数据,因此触发FileReference的事件. save()调用实际上是一个ResultEvent,而不是一个用户事件,我很谨慎地调度一个新的(虚假)用户事件类型,以便能够触发FileReference.save()调用,除非它肯定是一个用户事件,永远不会因实际用户与我的应用程序交互而被调度.
简而言之,我现在正在做的是:我有一个注册为按钮点击的处理程序的函数.在此函数中,我进行Web服务调用以从服务器获取数据.我还有一个结果处理函数,它在Web服务调用完成时被调用,而在这里我想调用FileReference.save()方法,因为此时我知道数据已准备好保存到一份文件.但上述限制阻止我这样做 - 我收到一个错误:
Error #2176: Certain actions, such as those that display a pop-up window,
may only be invoked upon user interaction, for example by a mouse click
or button press.
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多东西来解决这个问题,比如创建一个带有FileReference.save()调用的第二个鼠标单击事件处理函数,并在超时间隔后调用它(以便让Web服务时间完成),但我保留了遇到同样的错误 - 也许这种方法不起作用,因为第二个函数没有注册为用作其参数的事件类型的事件监听器.
我是Flex开发的新手,所以也许我只是没有以正确的方式思考这个问题.如果有人可以提出另一种方法,我会非常感激.提前感谢您的意见或建议.
- 詹姆士
我暂时从我的iOS项目中删除了一些文件,并认为它们已被完全删除.很长一段时间后,我创建了另一个类,不幸的是,它与我从项目中删除的那个名称相同(但是引用和文件都被删除了).
总而言之,我的项目尝试使用旧文件的引用,所以我通过finder删除了冲突的文件.这解决了哪个班级被引用的问题.但是对已删除文件的引用会在Xcode中发出警告,从而向我发送"丢失文件"消息.
有谁知道如何删除旧的引用,以摆脱这个警告?
我正在开发Flash中的图像上传器.我使用FileReference.browse浏览图像,然后将此图像调整为1000 x 1000像素,如果图像非常大,然后上传到服务器.我想显示图像上传进度的进度条.
我使用URLLoader来发送已调整大小的图像的二进制数据,但URLLoader上的ProgressEvent不能按预期的方式工作.仅在图像上传完成后才会触发,而不是显示中间进度.FileReference上的ProgressEvent完美地显示中间图像上载进度.
有没有办法使用URLLoader显示上传进度?要么
我们可以使用FileReference加载修改后的图像,然后调用FileReference.upload,这样就可以显示实际的进度条.
更新1:
但我的问题是我在使用FileReference.browse后调整浏览后的图像,我想上传调整后的图像,而不是浏览后FileReference对象中的原始图片.在这种情况下如何使用Filereference.upload?Filereference.upload将上传原始图像而不是已调整大小的图像.任何想法,如何将调整大小的图像放入Filereference对象,然后使用FileReference.upload.
更新2:
无法在虚拟FileReference中设置数据,数据是只读属性.
更新3:
但是从上面的链接出现同样的问题:无法显示图片上传进度:
"不幸的是,获取进度事件存在问题.我们无法在向服务器发送数据时显示任何进展,因为闪存不支持它"
我正在寻找上述问题的解决方案.URLLoader可以正常发布图像数据.
更新:
正如Jacob在下面的回复中所讨论的,限制或纠正FileReference.save的行为是不可能的.任何人都可以提出一个替代方案(服务器是Apache/PHP),它符合我在这篇文章中的所有标准,并避免了我与Jacob讨论过的陷阱吗?
结束编辑
我正在使用FileReference.save()从我的AS3应用程序保存图像.这是代码,工作正常:
var encoder:JPGEncoder = new JPGEncoder(80);
var byteData = encoder.encode(myBMD); //bitmap data object created earlier
var file:FileReference = new FileReference();
file.save(byteData, "myImage.jpg");
Run Code Online (Sandbox Code Playgroud)
这将按预期打开保存文件对话框.我正在使用它而不是将byteData发送到PHP,因为我希望用户有一个熟悉的对话框,让他们设置自己的文件名.
当用户将其操作系统配置为显示文件扩展名时,问题就出现了,就像我一样.这意味着在保存对话框中,文件名包含扩展名,如下图所示,因此用户在重命名文件时很容易删除该扩展名.由于此框的默认文件类型为"所有文件",因此如果删除扩展名,则文件将保存为无类型.
我不知道有什么方法可以在保存对话框上强制使用文件类型(如果有一个可能是我首选的路径),那么任何人都可以建议我这样做的安全方法仍然允许用户设置文件名本身使用操作系统的标准对话框?
我确实尝试在save()之前调用FileReference.browse(),如本教程所示,但是这会抛出一个错误,因为你一次只能执行一个FileReference调用.

我在Windows上使用Flash在Flash Player 10中,FileReference用于将文件加载到内存中,如下所示.
我的问题是,当一个文件被Windows锁定时,我FileReference没有给我任何关于该文件无法访问的反馈 - 它在调用之后根本不会发送任何事件load().
有没有人知道如何判断Flash Player无法打开文件?
var fileReference:FileReference = new FileReference();
private function onClick():void {
fileReference = new FileReference();
fileReference.addEventListener(Event.SELECT, onSelect);
fileReference.addEventListener(Event.COMPLETE, onComplete);
fileReference.addEventListener(Event.CANCEL, onOther);
fileReference.addEventListener(IOErrorEvent.IO_ERROR, onOther);
fileReference.addEventListener(ProgressEvent.PROGRESS, onOther);
fileReference.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onOther);
// I've tried adding all of the other declared events
// for FileReference here as well
fileReference.browse();
}
private function onSelect(event:Event):void {
trace(fileReference.name);
try {
fileReference.load();
} catch (e:Error) {
trace(e);
}
}
private function onComplete(event:Event):void {
trace(fileReference.data.length);
}
private function …Run Code Online (Sandbox Code Playgroud) 我有一个用户键入的字符串,我想将其保存到用户硬盘上的文件中.你能做到吗?如果是这样,怎么样?
在我的项目中,我让用户使用FileReference类选择图片.然后我使用load()函数将这些图片加载到他们的.data属性中.在此之后,我执行一些本地操作并将它们发送到服务器.
我想做的是,能够再次遍历挑选的FileReferences,将它们加载到.data属性中,执行不同的操作并再次将它们发送到服务器.我知道我应该可以从用户调用的事件中执行此操作,这不是问题.
问题是,一旦第一次加载FileReference,我无法以任何方式卸载它,并且我无法保存内存中所有图片的数据,因为这些是巨大的.
所以我想我只能做一件事,就是在FileReference上执行DeepCopy ......然后我可以加载第一个版本,废弃它并使用副本进行第二次"运行".
我试图使用ObjectUtil.copy,但是当我访问副本的例如.name属性时,它失败了:
Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful.
Run Code Online (Sandbox Code Playgroud)
在flash.net::FileReference/get name()
相关片段:
registerClassAlias("FileReference",FileReference);
masterFileList.addItem(FileReference(ObjectUtil.copy(fr_load.fileList[i])));
trace(masterFileList[i].name)
Run Code Online (Sandbox Code Playgroud)
是否有一些FileReference类的受保护属性阻止它被复制?如果是这样,我可以以某种方式回避这个问题吗?或者我的整体问题还有其他解决方案吗?
我很欣赏任何提示/想法!
apache-flex actionscript deep-copy actionscript-3 filereference
我编写了一个程序来查询更改日志记录并列出它们.变更日志返回:
1)filereferencenumber(fileindex.high和fileindex.low的组合)2)parentfilereferencenumber(与上面相同,除了它是用于目录)3)szReason(它出现在更改记录中的原因)4)Filename和Filelength.
我想找到更改日志中列出的此文件的路径.我见过的大多数实现都会跟踪所有的filereferencenumber并查询它以进行比较,或者它们使用FindNextFile()函数遍历整个卷.
我遇到了一个讨论,他们说,他们可以使用filereferencenumber打开一个文件句柄.http://www.tech-archive.net/Archive/Windows/microsoft.public.windows.file_system/2004-11/0244.html
msdn文章说,我们必须在调用Internal API之前加载一个库http://msdn.microsoft.com/en-us/library/bb432380%28v=vs.85%29.aspx
有人能指出我正确的方向,并告诉我到底该做什么?我如何使用NtCreateFile()?
或者,有没有办法只使用filereferencenumber访问文件路径?
我正在尝试使用FileReference类编写一个使用Flash Player 10+的本地文件,遵循Mike Chambers撰写此博客文章的格式:http://www.mikechambers.com/blog/2008/08/20/reading-and -写入和本地文件正在Flash播放器,10 /
基本上代码是这样的:
private function onSaveButtonClick(event:MouseEvent):void{
fr = new FileReference();
fr.save(fileToSave);}
Run Code Online (Sandbox Code Playgroud)
它在我的机器上本地工作正常,但在线使用时,单击保存按钮时不会显示保存文件对话框.我认为这是某种权限或安全相关的问题?
情况:我们知道下面将检查脚本是否已被直接调用.
if __name__ == '__main__':
print "Called directly"
else:
print "Imported by other python files"
Run Code Online (Sandbox Code Playgroud)
问题:该else子句只是一个通用子句,只要脚本没有直接调用就会运行.
问题:如果没有直接调用,有没有办法获取导入的文件?
附加信息:下面是我想象代码的示例,只是我不知道要放什么<something>.
if __name__ == '__main__':
print "Called directly"
elif <something> == "fileA.py":
print "Called from fileA.py"
elif <something> == "fileB.py":
print "Called from fileB.py"
else:
print "Called from other files"
Run Code Online (Sandbox Code Playgroud) filereference ×10
flash ×5
apache-flex ×4
actionscript ×2
windows ×2
c++ ×1
deep-copy ×1
file-type ×1
file-upload ×1
flex4 ×1
ios ×1
journal ×1
python ×1
save ×1
urlloader ×1
xcode4 ×1