darth
04-02-2009, 09:28 PM
Hi
I'm trying to make my air app download a file and write it to the disk as it is being downloaded. Here's my code
var stream:URLStream = new URLStream();
stream.addEventListener(ProgressEvent.PROGRESS, startWrite);
stream.addEventListener(Event.COMPLETE, writeComplete);
stream.load(new URLRequest("http://www.myweb.com/test.jpg"));
var file:File = File.documentsDirectory.resolvePath("test.jpg");
if(!file.exists){
}
var fileStream:FileStream = new FileStream();
fileStream.addEventListener(ProgressEvent.PROGRESS , fileprogress)
fileStream.addEventListener(Event.COMPLETE, filecomplete)
var offset:uint = 0
function writeAirFile():void {
var fileData:ByteArray = new ByteArray();
stream.readBytes(fileData,offset,stream.bytesAvail able);
trace(fileData.length)
fileStream.openAsync(file, FileMode.UPDATE)
//fileStream.open(file, FileMode.UPDATE);
fileStream.writeBytes(fileData,offset,fileData.len gth);
offset+=fileData.length-1
}
function writeComplete(evt:Event){
fileStream.close();
}
function filecomplete(evt:Event):void{
writeAirFile()
}
function startWrite(evt:ProgressEvent):void{
stream.removeEventListener(ProgressEvent.PROGRESS, startWrite)
writeAirFile()
}
after few successful writes I get error -
RangeError: Error #2006: The supplied index is out of bounds.
at flash.filesystem::FileStream/writeBytes()
at filewritetest_fla::MainTimeline/writeAirFile()[filewritetest_fla.MainTimeline::frame1:25]
at filewritetest_fla::MainTimeline/filecomplete()[filewritetest_fla.MainTimeline::frame1:35]
and it doesn't matter if i increment offset by fileData.length or fileData.length-1...
Could anyone explain this, am I trying to do it completely wrong?
I'm trying to make my air app download a file and write it to the disk as it is being downloaded. Here's my code
var stream:URLStream = new URLStream();
stream.addEventListener(ProgressEvent.PROGRESS, startWrite);
stream.addEventListener(Event.COMPLETE, writeComplete);
stream.load(new URLRequest("http://www.myweb.com/test.jpg"));
var file:File = File.documentsDirectory.resolvePath("test.jpg");
if(!file.exists){
}
var fileStream:FileStream = new FileStream();
fileStream.addEventListener(ProgressEvent.PROGRESS , fileprogress)
fileStream.addEventListener(Event.COMPLETE, filecomplete)
var offset:uint = 0
function writeAirFile():void {
var fileData:ByteArray = new ByteArray();
stream.readBytes(fileData,offset,stream.bytesAvail able);
trace(fileData.length)
fileStream.openAsync(file, FileMode.UPDATE)
//fileStream.open(file, FileMode.UPDATE);
fileStream.writeBytes(fileData,offset,fileData.len gth);
offset+=fileData.length-1
}
function writeComplete(evt:Event){
fileStream.close();
}
function filecomplete(evt:Event):void{
writeAirFile()
}
function startWrite(evt:ProgressEvent):void{
stream.removeEventListener(ProgressEvent.PROGRESS, startWrite)
writeAirFile()
}
after few successful writes I get error -
RangeError: Error #2006: The supplied index is out of bounds.
at flash.filesystem::FileStream/writeBytes()
at filewritetest_fla::MainTimeline/writeAirFile()[filewritetest_fla.MainTimeline::frame1:25]
at filewritetest_fla::MainTimeline/filecomplete()[filewritetest_fla.MainTimeline::frame1:35]
and it doesn't matter if i increment offset by fileData.length or fileData.length-1...
Could anyone explain this, am I trying to do it completely wrong?