Actionscript 3 从Flex中的Javascript读取ByteArray作为函数

Actionscript 3 从Flex中的Javascript读取ByteArray作为函数,actionscript-3,apache-flex,flex3,externalinterface,Actionscript 3,Apache Flex,Flex3,Externalinterface,我需要将ByteArray从Javascript函数传递到Flex Actionscript函数。 已尝试使用以下JS: function deviceResp(s){ var obj = document.getElementById('smera'); obj.deviceRespFx(s); } 我的职能: public function imageRespFxs(value:String):void{ Alert.show(value.length);

我需要将ByteArray从Javascript函数传递到Flex Actionscript函数。 已尝试使用以下JS:

function deviceResp(s){ 
    var obj = document.getElementById('smera');
    obj.deviceRespFx(s);    
}
我的职能:

public function imageRespFxs(value:String):void{
    Alert.show(value.length);
}
编辑: 回调函数加载到“creationComplete”上


由于上述方法是将字节数组转换为字符串,因此会丢失数据,请任何人协助将字节数组从JS传递到As函数。

多亏了Sam DeHaan

正如Sam评论所暗示的,我们最终成功地使它与Base64一起工作

以下是一些可能对其他人有帮助的代码:

首先,在Java代码中,我将图像转换为Base64字符串,如下所示:

  private String convertBase64String(BufferedImage image){

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    Base64OutputStream bi64 = new Base64OutputStream(baos);
    try{
    ImageIO.write(imgRegistration1, "png",bi64);
    baos.flush();               
    String data = baos.toString("UTF-8");
    return data;
    }catch(Exception e)
    {
        e.printStackTrace();
    }
    return null;

}
我将此作为方法发送给FLex,并按如下方式解码:

  import mx.utils.Base64Decoder;
  private var base64Dec:Base64Decoder;
  public function imageRespFxs(value:String):void{                
    var byteArr:ByteArray;
            base64Dec = new Base64Decoder();
            base64Dec.decode(value);
            byteArr = base64Dec.toByteArray();
            imgId.load(byteArr);

        }

谢谢

谢谢萨姆·德安

正如Sam评论所暗示的,我们最终成功地使它与Base64一起工作

以下是一些可能对其他人有帮助的代码:

首先,在Java代码中,我将图像转换为Base64字符串,如下所示:

  private String convertBase64String(BufferedImage image){

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    Base64OutputStream bi64 = new Base64OutputStream(baos);
    try{
    ImageIO.write(imgRegistration1, "png",bi64);
    baos.flush();               
    String data = baos.toString("UTF-8");
    return data;
    }catch(Exception e)
    {
        e.printStackTrace();
    }
    return null;

}
我将此作为方法发送给FLex,并按如下方式解码:

  import mx.utils.Base64Decoder;
  private var base64Dec:Base64Decoder;
  public function imageRespFxs(value:String):void{                
    var byteArr:ByteArray;
            base64Dec = new Base64Decoder();
            base64Dec.decode(value);
            byteArr = base64Dec.toByteArray();
            imgId.load(byteArr);

        }

谢谢

您需要显示在AS3中设置回调的位置(
ExternalInterface.addCallback(“deviceRespFX”,imageRespFxs);
)您的回调有什么问题?警报没有显示吗?警报未显示您期望的长度?你好,Sam,已编辑并更新回调调用,我可以在我的AS函数中得到响应,但这里的问题是将字节数组从JS传递到AS。由于ExternalInterface.call不允许输入变量AS ByteArrayys,JS函数中变量的长度为400,而AS函数中只有15。字节数组最初是字符串吗?中间是否有一个空/ 0字节,将翻译转换为字符串?您需要显示在AS3中设置回调的位置(<代码>外部接口.AddiCalbBead(“DeVICErESPFX”,IMAGEESPFXS);<代码> >)您有什么问题?警报没有显示吗?警报未显示您期望的长度?你好,Sam,已编辑并更新回调调用,我可以在我的AS函数中得到响应,但这里的问题是将字节数组从JS传递到AS。由于ExternalInterface.call不允许输入变量AS ByteArrayys,JS函数中变量的长度为400,而AS函数中只有15。字节数组最初是字符串吗?中间是否有一个空/ 0字节将翻译分解为字符串?