【问题标题】:How do you upload a photo in Flex 3?如何在 Flex 3 中上传照片?
【发布时间】:2013-01-22 04:00:04
【问题描述】:

在 Flex 3 中如何通过浏览和上传选项上传照片?

在 Flex 4 中有一个类似的选项:

<net:FileReference id="fileReference"
                       select="fileReference_select(event);"
                       complete="fileReference_complete(event);" />

但在 Flex 3 中没有&lt;net&gt; 标签。

编辑:

这是我的按钮点击处理程序代码

protected function uploadProfileImage(event:MouseEvent):void
        {

            
            var fileRef:FileReference= new FileReference();
            browseButton.addEventListener(MouseEvent.CLICK, onButtonClick);
            
            function onButtonClick(e:MouseEvent):void {
                fileRef.browse([new FileFilter("Images", "*.jpg;*.gif;*.png")]);
                fileRef.addEventListener(Event.SELECT, onFileSelected);
                Alert.show("0")
            }
            
            function onFileSelected(e:Event):void {
                fileRef.addEventListener(Event.COMPLETE, onFileLoaded);
                //fileRef.load();
                Alert.show("1");
            }
            
            function onFileLoaded(e:Event):void {
                var loader:Loader = new Loader();
                loader.loadBytes(e.target.data);
                //addChild(loader);
                profileImage.data = loader.content;
                profileImage.width = loader.width;
                profileImage.height = loader.height;
                this.height = profileImage.height;
                this.width = profileImage.width;
                this.visible = true;
                Alert.show("2");

            }

【问题讨论】:

    标签: actionscript-3 apache-flex flex4 flex3


    【解决方案1】:

    Flex 4 中也没有&lt;net&gt; 标签。 &lt;net:FileReference... 中的 net 部分是一个 xml 命名空间。在应用程序的 MXML 文件顶部定义了一堆。以下是基于 Flash 的 Flex 4 应用的示例:

    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    

    xmlns:s="library://ns.adobe.com/flex/spark" 只是将所有 Spark 组件映射到 s 命名空间,它允许您像这样在 MXML 中引用 Spark 组件,如 Button:

    <s:Button label="My Button"/>
    

    对于 Spark,Adobe 提供了一个清单文件,该文件将完全限定的 Spark 包映射到熟悉的 MXML 名称(this 问题有一个此类文件的示例)。您还可以将 AS3 包名称映射到 xml 命名空间。

    FileReferenceflash.net 包中。您可以将该包绑定到 net 命名空间,方法是在 MXML 文件的根标记中添加以下内容:

    xmlns:net="flash.net.*"
    

    完成此操作后,您可以在 MXML 中引用 flash.net 包中的类,方法是在它们前面加上“net”ala &lt;net:FileReference...

    当然,FileReference 不会继承 UIComponent,因此您无法将其直接添加到您的应用程序中。所以这可能不是你的情况。

    没有看到您发布的更多内容,我怀疑您问题中的 FileReference 是一个自定义组件,其包绑定到 net xmlns。

    您能否发布包含&lt;net:FileReference... 标记的完整MXML 文档?

    编辑

    使用您添加的代码,在您的脚本块中有这样的:

    var fileRef:FileReference = new FileReference();
    
    function onButtonClick(e:MouseEvent):void {
        fileRef.browse([new FileFilter("Images", "*.jpg;*.gif;*.png")]);
        fileRef.addEventListener(Event.SELECT, onFileSelected);
        fileRef.addEventListener(Event.CANCEL, onFileCanceled);
    }
    
    function onFileSelected(e:Event):void {
        fileRef.removeEventListener(Event.SELECT, onFileSelected);
        fileRef.removeEventListener(Event.CANCEL, onFileCanceled);
    
        fileRef.addEventListener(Event.COMPLETE, onFileLoaded);
        fileRef.load();
    }
    
    function onFileCanceled(e:Event):void {
        fileRef.removeEventListener(Event.SELECT, onFileSelected);
        fileRef.removeEventListener(Event.CANCEL, onFileCanceled);
    }
    
    function onFileLoaded(e:Event):void {
        fileRef.removeEventListener(Event.COMPLETE, onFileLoaded);
        var loader:Loader = new Loader();
        loader.loadBytes(e.target.data);
        profileImage.data = loader.content;
        profileImage.width = loader.width;
        profileImage.height = loader.height;
        profileImage.visible = true;
    }
    

    然后在你的 MXML 中有类似的东西:

    <mx:Button
        label="Click to Load Profile Image"
        click="onButtonClick(event)"/>
    
    <mx:Image
        id="profileImage"
        visible="false"/>
    

    编辑 2

    如果在FileReference 上调用load() 时遇到问题,请确保您的目标是正确的Flash Player。 This answer 解释了如何在 Flash Builder 中执行此操作。 IIRC,Flex 3 项目默认以 Flash Player 9 为目标。

    【讨论】:

    • 给我一张使用 Flex 3 上传的示例图片
    • 感谢您的重播...在上面的代码中显示 FileReference 中没有 load() 方法...请帮助我...
    • 您使用的是哪个版本的 Flash Player? load() 在 FP10 中添加。
    • 那么 load() 绝对是你可以使用的。应用程序没有编译吗?抛出错误?怎么了?
    • 错误:1061:通过静态类型 flash.net:FileReference 的引用调用可能未定义的方法加载。
    猜你喜欢
    • 2018-11-18
    • 2019-01-31
    • 2023-04-06
    • 2016-07-30
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    相关资源
    最近更新 更多