【问题标题】:How do I send a bytearray to server and detect progress?如何将字节数组发送到服务器并检测进度?
【发布时间】:2023-03-21 19:57:01
【问题描述】:

我正在使用 Flash 运行时(Flash 播放器 10)。我有一个 flv 编码的字节数组,我需要将它发送到服务器(简单的 php,没有 FMS 或套接字服务器)并保存在那里。我可以使用 urlLoader 并发布所有内容,但是我不会获得进度百分比,所以我尝试使用这样的文件引用保存它:

var url_ref:URLRequest = new URLRequest("save_vid.php");    
url_ref.contentType = "multipart/form-data; boundary="+getBoundary();
url_ref.data = _baFlvEncoder.byteArray;
url_ref.method = URLRequestMethod.POST;

var upfileRef:FileReference = new FileReference();
upfileRef.addEventListener(ProgressEvent.PROGRESS, onUploadProgress);
upfileRef.addEventListener(Event.COMPLETE, videoUploadComplete);
upfileRef.upload(url_ref);

但是当我尝试这个时,我得到一个错误:

Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful.

知道我该怎么做吗?

【问题讨论】:

  • 哪一行会抛出这个错误?
  • 删除了 PHP 标签,因为这是一个纯粹的动作脚本问题,接收服务器无关紧要。 “函数调用顺序不正确,或更早的调用不成功。” - 听起来您需要对某处的方法调用进行一些错误检查。
  • 问题是文件引用希望用户在它可以运行之前实际浏览并选择一个文件,否则它会抛出该错误。问题是,我没有上传存储在用户系统中的文件,而是上传了一个动态生成的字节数组。 mikechambers.com/blog/2009/02/28/…

标签: actionscript-3 file-upload http-post progress-indicator


【解决方案1】:

试试这个:

var vars :URLVariables = new URLVariables();
vars.bytearray  = _baFlvEncoder.byteArray;

var req :URLRequest = new URLRequest("save_vid.php");
req.method = URLRequestMethod.POST;
req.data = vars;

var ldr :URLLoader = new URLLoader();
ldr.addEventListener( Event.COMPLETE, onLoaded );
ldr.addEventListener( IOErrorEvent.IO_ERROR, onIOError );
ldr.addEventListener( ProgressEvent.PROGRESS, onProgress );
ldr.load( req );

function onProgress( e:ProgressEvent ):void 
{           
    trace( "Progress: " + e.bytesLoaded / e.bytesTotal );
}

在 PHP 中

$bytearray = $_POST['bytearray']

【讨论】:

  • 是否触发了完整事件?
  • 是的,触发了完整的事件。如果我发布的内容太大,也会触发 IOError ......但与进度火灾无关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多