Actionscript 3 AS3/AIR:尝试上载文件时出现IOStream错误
我正在制作一个AIR应用程序,用户将图像文件拖放到舞台上,然后该应用程序将这些拖放的图像上传到网站imgur.com,然后返回图像链接(XML格式) 我有两个问题: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
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);
}