Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 Actionscript-加载文件会冻结应用程序_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 Actionscript-加载文件会冻结应用程序

Actionscript 3 Actionscript-加载文件会冻结应用程序,actionscript-3,flash,Actionscript 3,Flash,我想从用户的计算机上传一个文件到我们的服务器。据我所知,我需要先使用加载此文件,然后才能将加载的字节发送到服务器 我正在使用方法加载一个文件。当文件大到3MB时,应用程序将冻结,直到加载完成 注意:我没有使用AIR,这是一个上传到web的swf。您可以使用FileStream类异步加载文件 看看这个 我已经为您复制了这里的代码,如果链接过期,这将帮助您 import flash.filesystem.FileMode; import flash.filesystem.FileStre

我想从用户的计算机上传一个文件到我们的服务器。据我所知,我需要先使用加载此文件,然后才能将加载的字节发送到服务器

我正在使用方法加载一个文件。当文件大到3MB时,应用程序将冻结,直到加载完成


注意:我没有使用AIR,这是一个上传到web的swf。

您可以使用FileStream类异步加载文件

看看这个

我已经为您复制了这里的代码,如果链接过期,这将帮助您

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
      }

希望这对您有所帮助

我看不出您为什么要用FileReference.load加载该文件。有什么特别的原因吗?如果加载该文件,它将无用地占用内存。您是在应用程序中使用该文件制作任何东西,还是只想按原样上传

对于纯上传,有一种更好的方法:FileReference.upload。它将上载文件而不将其加载到Flash Player中。流程是一样的,您需要触发.browse,监听select事件,然后调用upload


编辑:顺便说一句,我不太清楚为什么你的应用程序冻结。这也不应该发生在.load上-它是异步的。再加上一个3MB的文件将以闪电般的速度加载。或者至少应该这样。在完成文件加载后,你对文件做了什么,这不是冻结了你的应用程序吗?

不幸的是,FielestRAMM只适用于Adobe AIR应用程序。@ Subash Selvaraj,你可能要考虑在你被否决之前删除这个答案。dev.e.loper您是否可以更新您的问题,以指定Flash Player,因为它可能会混淆Air应用程序,这些应用程序与Flash Player应用程序相比,现在越来越普遍。您正在加载什么类型的文件?一旦加载,你将如何处理它。。。只是想了解一下您的需求。我建议使用URLLoader加载文件并使用FileReference保存它。但是,我需要再次了解您的要求。你能发布一些代码吗?更新了我的问题,提供了更多细节。我没有限制文件类型,它可以是图像或pdf。一旦它被加载,我就把它保存到我们的服务器上。我正在从计算机中选取此文件,那么URLLoader是否适用于此场景?看起来URLLoader用于下载是的URLLoader用于下载数据,我不确定您是否可以使用它从用户计算机下载文件。如果可能的话,您可能需要获取FileReference,然后以某种方式将URLRequest传递给urloader。然后您将使用URLRequest上传到服务器。但是,试试@Fygo建议的方法……也许可以将有问题的代码转移到工作线程?如果应用程序冻结,可能是因为发布HTTP请求,那么在默认情况下创建另一个异步层会有所帮助。还是说在安全性、工作人员和访问FileReference方面存在问题?上传方法是我尝试的第一件事。然而,我遇到了安全路障。在放弃之前,我花了相当长的时间想弄清楚。现在我先加载文件,然后使用http post上传加载的文件。嗯,如果没有任何代码示例,很难帮助您。如果我是你,我会尝试解决安全问题,或者在服务器上实际设置我的文件(只是服务器端文件),你可以从localhost测试swf。您将无法使用URLLoader-用户无法通过它选择文件+沙箱存在。您只能使用FileReference。如果你确定用户不会加载大文件,加载可以工作,但正如你所说,应用程序冻结-你能提供更多细节吗?