我想将用户计算机上的文件上传到我们的服务器。根据我的理解,我需要首先使用FileReference加载此文件,然后我可以将加载的字节发送到我们的服务器。
我正在使用FileReference.load方法加载文件。当文件很大~3MB时,应用程序会冻结,直到加载完成。
注意:我没有使用AIR,这是一个上传到网络的swf。
答案 0 :(得分:0)
您可以使用FileStream类异步加载文件。
检查link。
我已经为您复制了代码,如果链接过期,这对您有帮助。
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;
import flash.filesystem.File;
import flash.events.ProgressEvent;
import flash.events.Event;
// Declare the FileStream and String variables
private var _fileStream:FileStream;
private var _fileContents:String;
private function onCreationComplete():void // Fired when the application has been created
{
var myFile:File = File.appResourceDirectory; // Create out file object and tell our File Object where to look for the file
myFile = myFile.resolve("mySampleFile.txt"); // Point it to an actual file
_fileStream = new FileStream(); // Create our file stream
_fileStream.addEventListener(ProgressEvent.PROGRESS, onFileProgress); // Add our the progress event listener
_fileStream.addEventListener(Event.COMPLETE, onFileComplete); // Add our the complete event listener
_fileStream.openAsync(myFile, FileMode.READ); // Call the openAsync() method instead of open()
}
private function onFileProgress(p_evt:ProgressEvent):void // Event handler for the PROGRESS Event
{
_fileContents += _fileStream.readMultiByte(_fileStream.bytesAvailable, "iso-8859-1"); // Read the contens of the file and add to the contents variable
fileContents_txt.text = _fileContents; // Display the contents. I've created a TextArea on the stage for display
}
private function onFileComplete(p_evt:Event):void // Event handler for the COMPLETE event
{
_fileStream.close(); // Clean up and close the file stream
}
希望这有帮助
答案 1 :(得分:0)
我认为你没有理由用FileReference.load()加载文件。它有什么特别的原因吗?如果你加载文件,它将(无用地)占用内存。您是否在应用程序中使用该文件制作任何内容,或者只是想按原样上传它?
在纯上传的情况下,有一个更好的方法:FileReference.upload()(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#upload%28%29)。它将上载文件而不将其加载到Flash Player中。流程是一样的,你需要触发.browse(),听取select事件然后调用upload()。
编辑:顺便说一下,我不太清楚为什么你的应用程序冻结了。这不应该发生在.load()上 - 它是异步的。另外一个3MB的文件会快速加载闪电。或者至少它应该。在完成加载后你对文件做了什么,是不是冻结你的应用程序?