Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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 AS3/AIR:尝试上载文件时出现IOStream错误_Actionscript 3_File Upload_Air_Drag And Drop_Iostream - Fatal编程技术网

Actionscript 3 AS3/AIR:尝试上载文件时出现IOStream错误

Actionscript 3 AS3/AIR:尝试上载文件时出现IOStream错误,actionscript-3,file-upload,air,drag-and-drop,iostream,Actionscript 3,File Upload,Air,Drag And Drop,Iostream,我正在制作一个AIR应用程序,用户将图像文件拖放到舞台上,然后该应用程序将这些拖放的图像上传到网站imgur.com,然后返回图像链接(XML格式) 我有两个问题: 该程序成功地处理了一个非常小的文件,但是如果文件较大(1mb或更大),我会得到一个IOStream错误2023。Imgur支持上传高达10mb的数据,所以我知道这一定是我自己的事情 我希望能够一次将多个图像文件放入程序中,并让它上载所有图像文件(同步或异步,都无所谓)。现在,当我尝试执行此操作时,程序会给出错误(沿byteArray

我正在制作一个AIR应用程序,用户将图像文件拖放到舞台上,然后该应用程序将这些拖放的图像上传到网站imgur.com,然后返回图像链接(XML格式)

我有两个问题:

  • 该程序成功地处理了一个非常小的文件,但是如果文件较大(1mb或更大),我会得到一个IOStream错误2023。Imgur支持上传高达10mb的数据,所以我知道这一定是我自己的事情

  • 我希望能够一次将多个图像文件放入程序中,并让它上载所有图像文件(同步或异步,都无所谓)。现在,当我尝试执行此操作时,程序会给出错误(沿byteArray线的某些值必须大于0)

  • 下面是给我带来问题的代码。(感谢您在advanced中的帮助)

    完成此操作后:

    var ba:ByteArray = new ByteArray();
    var stream:FileStream = new FileStream();
    stream.open(file, FileMode.READ);
    stream.readBytes(ba);
    stream.close(); 
    
    您已经拥有文件/图像的
    ByteArray
    。你就不能把这个寄过来

    private function addImage(nativePath:String):void
    {
        trace("addImage() called.");
        trace("NativePath is: " + nativePath);
        //var file:File = new File(nativePath);
        var file:File = File.desktopDirectory.resolvePath(nativePath);
        var ba:ByteArray = new ByteArray();
        var stream:FileStream = new FileStream();
        stream.open(file, FileMode.READ);
        stream.readBytes(ba);
        stream.close();         
    
        urlLoader = new URLLoader();
        urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
        urlLoader.addEventListener(Event.COMPLETE, onCookieSent);
        urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
        urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
    
        var vars:String = "?key=" + API_KEY + "&name=name&title=title";
        var request:URLRequest = new URLRequest(UPLOAD_URL + vars);
        request.contentType = "application/octet-stream";
        request.method = URLRequestMethod.POST;
        request.data = ba;
        urlLoader.load(request);
    }
    

    嗨,pkyeck,看起来你总是在这里帮助我,我很感激:)你建议的代码工作得很好。我从以前的项目中提取了很多代码,但忘记删除一些不需要的代码,所以谢谢!该应用程序现在可以上传大小图像。我还有两件事要处理:1)能够跟踪%的上传进度(似乎URLLoader只为progressEvent分派0或100%),2)允许一次放入多个文件,并将它们全部上载。有什么解决这些问题的建议吗?再次感谢你的帮助!很高兴我能帮忙。(那么别忘了接受答案…)。对于剩下的两个Qs:1)通常你应该得到的不仅仅是0%和100%。是不是太快了,以至于没有时间再做了?2) 建立一个队列,这样当你拖放多个文件时,你就可以一个接一个地上传它们。不,我不认为这么快,因为我将使用6mb的图像,上传需要30秒。我将progressEvent.PROGRESS事件添加到urlLoader中,并在处理程序中跟踪出(e.bytesload/e.bytesTotal)*100。它只跟踪“0%”和“100%”:(2)关于排队的建议?我是否应该检查文件是否以正确的扩展名结尾,将文件路径存储在数组中,然后在执行图像加载/上载时在数组中循环?1)似乎不支持上载文件时的进度监控。2) 是的,将每个文件添加到数组中,然后开始上载第一个文件。完成后,将其从数组中移除,然后再次启动第一个索引(数组中的前第二个索引),直到数组中没有剩余索引。
    private function addImage(nativePath:String):void
    {
        trace("addImage() called.");
        trace("NativePath is: " + nativePath);
        //var file:File = new File(nativePath);
        var file:File = File.desktopDirectory.resolvePath(nativePath);
        var ba:ByteArray = new ByteArray();
        var stream:FileStream = new FileStream();
        stream.open(file, FileMode.READ);
        stream.readBytes(ba);
        stream.close();         
    
        urlLoader = new URLLoader();
        urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
        urlLoader.addEventListener(Event.COMPLETE, onCookieSent);
        urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
        urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
    
        var vars:String = "?key=" + API_KEY + "&name=name&title=title";
        var request:URLRequest = new URLRequest(UPLOAD_URL + vars);
        request.contentType = "application/octet-stream";
        request.method = URLRequestMethod.POST;
        request.data = ba;
        urlLoader.load(request);
    }