У меня есть стандартный сценарий AIR, скомпилированный на Flash или Flash Builder 4.5, предназначенный для загрузки файла на серверный код php. Код начинается с записи файла на рабочий стол пользователя перед завершением запроса.Ошибка # 2044: необработанный IOErrorEvent :. text = Ошибка # 2038: Ошибка ввода-вывода файла
import flash.net.*;
import flash.filesystem.*
//create the file
var file:File = File.desktopDirectory;
file = file.resolvePath("test.txt");
var fs:FileStream = new FileStream();
fs.open(file, FileMode.WRITE);
//write "test" to txt file
fs.writeUTFBytes("test");
fs.close();
//start request
var req:URLRequest = new URLRequest();
req.method = "POST";
req.url = //php file
var vars:URLVariables = new URLVariables();
vars.a = 1;
vars.b = 2;
vars.c = 3
req.data = vars;
file.upload(req, "txt_file");
Теперь, когда я загрузить на PHP файл на моем собственном тестовом сервере Apache на локальном хосте (XAMPP), загрузка файлов проходит без каких-либо ошибок. Однако, когда я пытаюсь загрузить на мой фактический сервер, я получаю сообщение об ошибке ввода/вывода:
Error #2044: Unhandled IOErrorEvent:. text=Error #2038: File I/O Error.
Я проверил мой MAX_FILE_SIZE набор в 2MB, так что это не проблема. URL-адрес также верен. Глядя на другие источники (например, http://www.judahfrangipane.com/blog/2007/01/01/error-2044-unhandled-ioerrorevent-texterror-2038-file-io-error/), некоторые предполагают, что проблема с Apache ModSecurity, выключил, установив .htaccess для каталога, чтобы:
SecFilterEngine Off
SecFilterScanPOST Off
Это не работает. Фактически, это делает остальную часть моего кода, предназначенного для получения данных с того же сервера устаревшими. Я также знаю, что это не междоменная проблема. Я также попытался установить PHP-код для возврата HTTP 200. Все еще не работает. Некоторые предположили, что эти ошибки немного случайны, и фактическая загрузка файла произошла независимо от ошибки. Таким образом, проблема может быть устранена, просто улавливая ошибку и игнорируя ее (http://dev.nuclearrooster.com/2008/04/05/uploading-with-a-filereference-from-flex-3-on-os-x/). Для меня это не вариант, так как мне нужно отслеживать ход загрузки.
Интересно, что это, по-видимому, проблема Mac OSX, поскольку у меня есть точный скрипт, работающий на компиляторе Windows без ошибок, хотя единственное условие - это то, что они были сделаны с более старой версией AIR. Поэтому я не уверен, так ли это здесь.
Я ударил головой о стену в течение 3 дней. Пожалуйста, помогите мне ......
UPDATE
Просто нашел, что мой сервер, где файл загрузки на возвращает ответ HTTP 301 по запросу на загрузку файлов, то, что снова происходит только на OSX на AIR, а не на Windows или данные формы, представленные через Firefox.
Единственная проблема с этим обходным путем заключается в том, что мы больше не можем отслеживать загрузку ProgressEvent, которая теперь отслеживает ход загрузки. – jazz090