Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Сохранение картинок в альбом из iFrame флеш приложения (http://www.flasher.ru/forum/showthread.php?t=200357)

caseyryan 02.06.2013 16:28

Сохранение картинок в альбом из iFrame флеш приложения
 
Парни, как можно загрузить картинку в альбом в контакте если флешка встроена в айфрейм? Постоянно вылетает нарушение изолированной среды, когда ответ приходит. Если флешка просто залита в контакт, все норм работает и сохраняется.
Самая тупость в том, что URL запросы к конакту работают нормально, если к ним не прикреплять байтмассив с изображением, и текстовые данные приходят. Получается что даже картинка отправляется, но когда приходит JSON объект с данными для сохранения server, hash, aid то вылетает ошибка.
Как это проксировать через свой сервер тоже ума не приложу. Уже всю голову сломал.
У кого-нибудь есть рабочий вариант подобных манипуляций?

п.с. Сейчас код вот такой:
Код AS3:

                private static function uploadVkPhoto():void {
 
                        var imageStream:ByteArray = PNGEncoder.encode(_image.bitmapData);
 
                        var stream:ByteArray = new ByteArray();
                        var delimeter:String = "----------Ij5ae0ae0KM7GI3KM7";
                        var imageName:String        = MD5.encrypt(getTimer() + "") + ".png";
                        stream.writeUTFBytes("--" + delimeter + '\r\nContent-Disposition: form-data; name="file1"; filename="' + imageName + '"\r\nContent-Type: image/png\r\n\r\n');
                        stream.writeBytes(imageStream);
                        stream.writeUTFBytes("\r\n--" + delimeter + '--\r\n');
 
                        var header:URLRequestHeader = new URLRequestHeader ("Content-type", "multipart/form-data; boundary=" + delimeter);
                        var urlRequest:URLRequest = new URLRequest(_vkUploadServer);
                        urlRequest.requestHeaders.push(header);
                        urlRequest.method = URLRequestMethod.POST;
                        urlRequest.data = stream;
 
                        var urlLoader:URLLoader = new URLLoader();
                        urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
                        urlLoader.addEventListener( Event.COMPLETE, onVkPhotoUploaded );
                        urlLoader.addEventListener( IOErrorEvent.IO_ERROR, photoUploadError );
                        try {
                                urlLoader.load( urlRequest );
                        } catch (e:Error) {
                                trace(e.getStackTrace());
                        }
 
                }
 
                private static function onVkPhotoUploaded(e:Event):void {
 
                        e.target.addEventListener( Event.COMPLETE, onVkPhotoUploaded );
                        e.target.addEventListener( IOErrorEvent.IO_ERROR, photoUploadError );
                        var responce:        Object        = Json.decode(unescape(String(e.target.data)));
                        var server:                String        = responce.server;
                        var hash:                String        = responce.hash;
                        var photosList:        String        = responce.photos_list;
                        var aid:                String        = responce.aid;
                        _vk.api("photos.save", { photos_list: photosList, aid: aid, hash: hash, server: server },
                                onVkPhotoSaved, onVkError );
                }

Он рабочий. Но только если флешка не на другом домене.

anonrab 10.07.2013 17:01

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

Адрес загрузки фото получается нормально, но при попытки сделать на него пост запрос с фотографией вываливается ошибка:
Error #2044: Unhandled securityError:. text=Error #2048: Security sandbox violation: cannot load data from

caseyryan 10.07.2013 17:47

Решил как советовали уже сталкивающиеся с этой проблемой. Просто залил файл как дополнительный swf на сервер контакта и вставил ссылку на него в айфрейм.
Так же мне в контактовской техподдержке сказали, что никакой привязки по IP нет, и дали вот эту ссылку:
http://pastebin.com/KSyv6kwV
сказали, что вариант рабочий 100%. Но я не проверял, так как необходимость временно отпала.

anonrab 10.07.2013 18:36

Не понял, причем здесь swf и привязка по айпи, ведь ты загружаешь картинку в альбом? У меня приложение загружено тоже через айфрэйм, без предварительной загрузки на свой сервер.

Сначала получаю url вконтакта на который должна быть загружена фотография, потом post запросом отправляю png на этот url. Возникает security error. Загружать сначала пробовал как и ты, через url loader, но не работало. Прочитал что для этого используют MultiPartLoader, но с ним такая же ошибка.

Подозреваю, что ошибка из за того, что crossdomain где-то неправильно указан. Но везде пишут, что для загрузки фото на сервер загрузка должна инициализироваться при клике на кнопку. Попробовал при клики - все та же ошибка..

caseyryan 10.07.2013 18:54

Цитата:

Не понял, причем здесь swf и привязка по айпи, ведь ты загружаешь картинку в альбом?
При том, что для проксирования всей этой хрени через свой сервер я передавал серверу ссылку для загрузки, делал все так же как на клиенте, абсолютно. При этом на сервер в результате возвращался пустой массив photos.
Иного объяснения, как участие IP адреса в формировании подписи запроса у меня тогда не нашлось.

Цитата:

Подозреваю, что ошибка из за того, что crossdomain где-то неправильно указан.
Естественно. Кто же будет вносить в контактовский кроссдоменник адреса серверов сторонних разрабочиков?

Цитата:

У меня приложение загружено тоже через айфрэйм, без предварительной загрузки на свой сервер.
Это как? Оно хранится на контактовском сервере?

anonrab 10.07.2013 19:48

Цитата:

Сообщение от caseyryan (Сообщение 1140686)
При том, что для проксирования всей этой хрени через свой сервер я передавал серверу ссылку для загрузки, делал все так же как на клиенте, абсолютно. При этом на сервер в результате возвращался пустой массив photos.
Иного объяснения, как участие IP адреса в формировании подписи запроса у меня тогда не нашлось.

То есть ты в итоге сделал загрузку изображений вконтакт, через свой сервер. Клиент грузит изображение на свой сервер, там его сохраняет и возвращает url сохраненного изображения на клиент. Клиент постит картинку вконтакт используя предоставленный сервером урл. Мне бы хотелось загружать изображения, не загружая свой сервер, а используя встроенные средства вконтакта.

Цитата:

Сообщение от caseyryan (Сообщение 1140686)
Естественно. Кто же будет вносить в контактовский кроссдоменник адреса серверов сторонних разрабочиков?

Согласен, никто. Но тогда получается, что флэш приложение находящееся на моем сервере, открытое вконтакте в айфрэйме, не сможет обратиться к серверам вконтакте для загрузки на них фотографий из за этих политик?

То есть получается существует единственный способ отправлять фотографию вконтакт - загрузить на свой сервер, а потом оттуда вконтакт.


Цитата:

Сообщение от caseyryan (Сообщение 1140686)
Это как? Оно хранится на контактовском сервере?

Неправильно выразился - это я не про приложение, а про загружаемую картинку. Приложение то как раз на моем сервере, в айфрэйме.

caseyryan 11.07.2013 10:51

Цитата:

То есть получается существует единственный способ отправлять фотографию вконтакт - загрузить на свой сервер, а потом оттуда вконтакт.
нет, не единственный. У меня приложение залито как дополнительный swf файл на сервер вконтакте и ссылка вставлена в айфрейм

anonrab 30.08.2013 20:43

Ну это же неудобно - чтобы обновить приложение во всех соц сетях, вместо простого изменения swf на своем сервере, придется отдельно обновлять приложение через интерфейс загрузки.

Попробовал загружать swf как дополнительный файл и встроить его в iframe через swfobject - не работает. Просто белый экран вместо флэшки. Это похоже опять политики безопасности - ну как iframe может загрузить flash приложение с совершенно другого домена?

Добавлено через 2 часа 14 минут
Слава флэш богу разобрался. Все таки можно загрузить вконтакте дополнительный swf и загрузить его в iframe через swfobject, даже если страница открыта не вконтакте.

caseyryan 31.08.2013 11:23

Цитата:

Ну это же неудобно - чтобы обновить приложение во всех соц сетях, вместо простого изменения swf на своем сервере, придется отдельно обновлять приложение через интерфейс загрузки.
Какая разница, заливать его на свой сервер или в контакт? Работы столько же.

carrotoff 05.09.2013 18:32

Цитата:

Какая разница, заливать его на свой сервер или в контакт? Работы столько же.
Ничего подобного. Когда приложение автоматом собирается для нескольких соцсетей и деплоится на свой сервер - это очень круто и удобно. 1 приложение - на несколько соц сетей.

Костыль с заливкой приложения на их сервер лишает этого удобства.


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

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