Я использовал примеры здесь Загрузите файл с помощью Adobe AIR и встроенное приложение, которое загружает файлы с сервера.
Я постараюсь объяснить ошибку пошагово.
1) Приложение Adobe Air загрузило XML-файл с сервера http://example.com/data/init.xml
2) Я открыл его и все в порядке.
3) Приложение Adobe Air снова загрузило тот же файл с сервера. Теперь, если я открываю его с помощью Блокнота, он говорит, что init.xml - это двоичный файл. Если я удалю init.xml с диска и попробую еще раз - то же самое. init.xml - это двоичный файл Приложение Reopen Air не работает.
4) Я изменил файл init.xml на сервере на init123.xml и снова загрузил его. init123.xml был открыт как обычный xml файл. Если я снова скачаю его, то шаг 3 - init123.xml - это двоичный файл.
Где может быть ошибка?
Спасибо.
ОС - Windows 7
MD5 файлов также изменилось.
Это можно решить, добавив случайное число в конец URL.
urlStream.load(new URLRequest(remoteFile+'?'+Math.random()));
но это
urlStream.load(new URLRequest(remoteFile));
делает файл двоичным, если я загружаю его второй раз.
Источник
private function startDownloading():void
{
destFile.nativePath = destDirectory +destFileBase;
fileStream = new FileStream();
fileStream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, outputProgress);
fileStream.addEventListener(IOErrorEvent.IO_ERROR, fileAccessError);
fileStream.openAsync(destFile, FileMode.WRITE);
urlStream = new URLStream();
urlStream.addEventListener(ProgressEvent.PROGRESS, progress);
urlStream.addEventListener(Event.COMPLETE, complete);
urlStream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, urlStreamSecurityError);
urlStream.addEventListener(IOErrorEvent.IO_ERROR, urlStreamIOError);
urlStream.load(new URLRequest(remoteFile));
}
protected function fileAccessError(event:IOErrorEvent):void
{
urlStream.close();
fileStream.close();
}
protected function outputProgress(event:OutputProgressEvent):void
{
if(event.bytesPending == 0 && downloadCompleteFlag ) {
}
}
protected function urlStreamIOError(event:IOErrorEvent):void
{
trace('error 2');
}
protected function urlStreamSecurityError(event:SecurityErrorEvent):void
{
trace('error 2');
}
protected function progress(event:ProgressEvent):void
{
var bytes :ByteArray = new ByteArray();
var thisStart :uint = currentPosition;
currentPosition += urlStream.bytesAvailable;
urlStream.readBytes( bytes, thisStart );
fileStream.writeBytes( bytes, thisStart );
}
protected function complete(event:Event):void
{
urlStream.close();
fileStream.close();
downloadCompleteFlag = true;
}