Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   UrlLoad.load не запускается. (http://www.flasher.ru/forum/showthread.php?t=159715)

kiloT 04.07.2011 18:47

UrlLoad.load не запускается.
 
Здравствуйте. Пытаюсь отправить фотографию в альбом Вконтакте. Собственно в переменной url лежит адрес сервера для загрузки. В последней строчке вызываю метод load. Но проблема в том, что функция ничего не отправляет и не выводит ошибок. В чем проблема?

Код AS3:

var ba:ByteArray = new ByteArray();
var encoder:PNGEncoder = new PNGEncoder();
var bd:BitmapData = new BitmapData(CityFarm.instance.width, CityFarm.instance.height);
var mul:MultipartURLLoader = new MultipartURLLoader();
 
bd.draw(world.layer);
ba = encoder.encode(bd);
ba = MultipartData.addFile(ba, "image1");
 
var request:URLRequest = new URLRequest();
request.url = url;
request.requestHeaders.push(new URLRequestHeader("Content-type", "multipart/form-data; boundary=" + MultipartData.BOUNDARY));
request.method = URLRequestMethod.POST;
request.data = ba;
 
var imageLoader:URLLoader = new URLLoader();
imageLoader.dataFormat = URLLoaderDataFormat.BINARY;
imageLoader.addEventListener(Event.COMPLETE, onLoaderComplete);
imageLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorHandler);
imageLoader.load(request);

MultipartData
Код AS3:

package org.flashgate.external.uploader {
        import flash.utils.ByteArray;
        /**
        * ...
        * @author rzer
        */

        public class MultipartData{
 
                public static const BOUNDARY:String = "----------cH2gL6ei4Ef1gL6GI3Ij5Ef1Ef1Ef1";
                private static const CRLF:String = "\r\n";
                private static const HYPHENS:String = "--";
 
                public static function addFile(file:ByteArray, name:String = "Filedata", fileName:String = "name.jpg"):ByteArray {
 
                        var data:ByteArray = new ByteArray();
                        data.writeUTFBytes(HYPHENS + BOUNDARY + CRLF);
                        data.writeUTFBytes("Content-Disposition: form-data; name=" + name + "; filename=" + fileName + CRLF);
                        data.writeUTFBytes("Content-Type: application/octet-stream" + CRLF + CRLF);
                        data.writeBytes(file);
                        data.writeUTFBytes(CRLF);
 
                        var result:ByteArray = new ByteArray();
                        result.writeBytes(data);
                        result.writeUTFBytes(HYPHENS + BOUNDARY + HYPHENS);
                        return result;
                }
 
        }
 
}


alatar 04.07.2011 19:01

Возможно дело в политике безопасности.
Цитата:

В приложении Flash Player 10 и более поздней версии при использовании типа содержимого multipart (например, multipart/form-data), в котором содержится отправка (обозначена параметром filename в заголовке content-disposition в теле оператора POST), к операции POST применяются правила безопасности для отправок:

Операция POST должна быть выполнена в ответ на действие, инициированное пользователем, такое как щелчок мыши или нажатие клавиши.
Если операция POST является междоменной (назначением операции POST не является сервер, на котором содержится SWF-файл, отправляющий запрос POST), целевой сервер должен предоставить файл политик URL, в котором разрешен междоменный доступ.
Кроме того, все объекты multipart Content-Type должны иметь допустимый синтаксис (в соответствии со стандартами RFC2046). Если синтаксис является недопустимым, к операции POST применяются правила безопасности, действующие для загрузок.

kiloT 04.07.2011 19:05

а почему try catch ничего не ловит?

если я использую такой способ тогда вываливается ошибка про безопасность:
Код AS3:

mul.addEventListener(Event.COMPLETE, onLoaderComplete);
mul.addFile(ba, "file1.png", "file1", 'image/png');
mul.load(url);

а с приведенным в самом начале нет.

И вообще можно ли как нибудь обойтись без действий пользователя?

alatar 04.07.2011 19:19

Цитата:

а почему try catch ничего не ловит?
try catch ничего и не словит на асинхронной операции.
Цитата:

И вообще можно ли как нибудь обойтись без действий пользователя?
К счастью нет.

kiloT 04.07.2011 19:37

Спасибо за разъяснения.

Добавлено через 15 минут
Делаю так:
Код AS3:

mul.addEventListener(Event.COMPLETE, onLoaderComplete);
mul.addFile(ba, "file1.png", "file1", 'image/png');
 
world.addEventListener(MouseEvent.CLICK, function load(e:Event):void {
                                          try{
                                            mul.load(url);
                                          }catch (e:Error) {
                                              new MessageWindow("ERROR", e.message).show();
                                          }
                                    }
              );

Но все равно глухо как в танке. Вообще кто нибудь отправлял фотографии в альбом?:)


Часовой пояс GMT +4, время: 21:52.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.