![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Mar 2011
Сообщений: 5
|
Уважаемые ГУРУ AS!
Прошу прощения, за отдельную тему, но просмотрел все темы катающиеся ошибки "SecurityError: Error #2000: Отсутствует активный контекст безопасности." Нигде нет вразумительного ответа, перерыл весь интернет - ситуация аналогичная. Теперь по сути: 1.Есть код: var fileData:FileReference = new FileReference; var uploadURL:URLRequest = new URLRequest("upload.php"); uploadURL.data = new URLVariables("mode=1") uploadURL.method = URLRequestMethod.POST; var elem:Object = new Object; elem = photos.getItemAt(num); fileData = FileReference(elem.fr); fileData.upload(uploadURL,"Filedata", false); fileData.addEventListener(Event.COMPLETE,onFileUploaded); fileData.addEventListener(HTTPStatusEvent.HTTP_STATUS,onFilesUploadedErr); 3.На удаленном (хостинг) - выдает ошибку; 4.Попытка изменить вызов отправки файла на setTimeout( function():void{upfr.upload(uploadURL);}, 1); - как описано в блогах с данной проблемой эффекта не дает; 5.Размещение crossdomain.xml - эффекта не дает. 6.Добавление Security.allowInsecureDomain("*") Security.allowDomain("*"); Security.loadPolicyFile("crossdomain.xml"); 7.Согласно help.adobe.com - все должно работать без проблем (домен вызова flash и запуска скрипта загрузки один), по данной ошибке существует только упоминание в таблице ошибок времени выполнения. Прошу не пинать и не посылать в man - опыт программирования достаточен (более 10 лет), но с AS - всего несколько месяцев. Поэтому я тут... Заранее благодарен, за ответы! |
|
|||||
|
Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
|
Security.loadPolicyFile("http://сайт/crossdomain.xml"); //.... var uploadURL:URLRequest = new URLRequest("http://сайт/upload.php"); var fileReference:FileReference = new FileReference(); fileReference.addEventListener(Event.SELECT,fileSelect); fileReference.browse(); function fileSelect(e:Event):void { fileReference.upload(new URLRequest("http://сайт/uplodad.php"), "upload"); fileReference.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadComplite); } function uploadComplite(e:DataEvent):void { //загрузка завершена } используйте класс MultipartData для отправки изображений var img_to_post:ByteArray = JPEGEncoder.encode(img); var mdata:MultipartData = new MultipartData(); //MultipartData и JPEGEncoder ищем в сети mdata.addFile(img_to_post, "photo", "photo.jpg"); var urlRequest = new URLRequest(send_url); urlRequest.url = send_url; urlRequest.method = URLRequestMethod.POST;; urlRequest.requestHeaders.push(new URLRequestHeader("Content-type", "multipart/form-data; boundary=" + MultipartData.BOUNDARY)); urlRequest.data = mdata.data; var urlLoader:URLLoader = new URLLoader(); urlLoader.load(urlRequest); Но у URLLoader есть один минус он не может отправлять файлы без мышиного событий (таймером вы не отправите) Последний раз редактировалось kseniya; 04.04.2011 в 14:43. |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 5
|
Спасибо kseniya - пробовал не помогает.
Кстати на личном опыте проверенно, что во flex работают и абсолютные и относительные пути!!! Уже голову сломал.... а каменный цветок не выходит.... При этом обнаружил, что у меня не работает demo и http://weblog.cahlan.com/2006/09/upl...x-and-php.html, и http://weblog.cahlan.com/2006/12/fle...component.html - ошибка SecurityError Или у них не работает!!!! Просто явно выполнить browse и затем upload - не получится к сожалению, так как выбранные с помощью FileReference помещаются в объект к которому прибиндин DataGrid c ItemRender Canvas и ItemRender CheckBox - пользователь выбирает нужный и отправляет на закачку. Но на локальной машине - то работает!!!!! Вот в чем вопрос.....???? MultipartData - не найден на help.adobe.ru, нагуглил только для C#. Попробовал отправить объект - сформированный по образу и подобию - эффекта ноль.... Думал баг с adobe flash pleer'ом - пере установил, теперь виден только результат работы самого swf(error event'ы) - ошибок не выдает, не работает нужным образом и в режим дебагера не запускается!!!! Не решилось никак!!! Буду копать дальше. НО все равно огромное спасибо, за внимание к моей проблеме. Может быть, кто-нибудь знает, как файлы через RPC-передавать, как например в AMF? Возник вопрос: Может быть я не правильно публикую (простым копированием)? Если, кто знает как правильно - подскажите пожалуйста??? Добавлено через 46 часов 4 минуты Решил проблему через AMPPHP 1.9+Flex... 1.Код Flex: private var frList:FileReference = new FileReference; frList.addEventListener(Event.SELECT, addFiles); frList.addEventListener(Event.COMPLETE, completeUpload); private function uploadImage():void { frList.browse([new FileFilter("Картинки JPG, PNG, GIF","*.jpg;*.jpeg;*.png;*.gif")]); \\Выбираем файл } private function addFiles(event:Event):void { frList.load(); \\Загружаем выбранный файл после по событию выбора } private function resizeBitmap(target:Bitmap):void { if (target.height>target.width) { target.width=1024; target.scaleY=target.scaleX; } else if (target.width >= target.height) { target.height=768; target.scaleX=target.scaleY; } } private function uploadResizedImage(target:Bitmap):void { var bmd:BitmapData=new BitmapData(target.width,target.height); bmd.draw(target, new Matrix(target.scaleX, 0, 0, target.scaleY)); var encoded_jpg:JPEGEncoder = new JPEGEncoder(50); var jpg_binary:ByteArray=encoded_jpg.encode(bmd); \\Кодируем в jpeg articleImageService.getOperation("saveImage").send(jpg_binary); \\Отправляем на сервер AMFPHP } private function completeUpload(event:Event):void { byteArrayToBitmapData(frList.data); \\Преобразуем ByteArray в BitmapData } private function byteArrayToBitmapData(ba:ByteArray):void { loader.contentLoaderInfo.addEventListener(Event.COMPLETE, getBitmapData); loader.loadBytes(ba);\\Загружаем ByteArray в Loader - преобразуем в BitmapData } private function getBitmapData(e:Event):void \\Формируем Bitmap { var content:* = loader.content; var BMPData:BitmapData = new BitmapData(content.width,content.height); var UIMatrix:Matrix = new Matrix(); BMPData.draw(content, UIMatrix); var bm:Bitmap = new Bitmap(BMPData); if (bm.width>1024||bm.height>768) { resizeBitmap(bm); \\Передаем в ресайзер } uploadResizedImage(bm); \\Сразу передаем в загрузчик } <s:RemoteObject endpoint="gateway.php" source="saveImage" destination="saveImage" id="saveImageService" showBusyCursor="true" fault="saveImageService_faultHandler(event)"> <s:method name="saveImage" result="saveImage_resultHandler(event)"/> </s:RemoteObject>
Особое спасибо kseniya - за участие в разрешении проблемы. Добавлено через 46 часов 8 минут PS:Получилось даже немного лучше - меньше обмен данными при отправке на сервер, потому что первоначальный ресайз происходит на стороне клиента. Вместо JPEGEncoder можно использовать PNGEncoder - тогда изображения на сервер будут отправляться в .png... Добавлено через 46 часов 17 минут Нашел ошибку - действительно в ресайзе: не учел случай равенства ширины и высоты изображения необходимо заменить if ($index_img > 1) на if ($index_img >= 1) Последний раз редактировалось JeStas; 13.04.2011 в 00:44. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|