Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Пример работы photos.getWallUploadServer (http://www.flasher.ru/forum/showthread.php?t=206583)

Lampy 13.02.2014 01:54

Пример работы photos.getWallUploadServer
 
Добрый вечер. понимаю, что вас все задолбали, но просто уже второй день мучаюсь. Не могу картинку с хостинка на стену пользователю закинуть. Собственно документации как таковой в контакте мало и не понятно, не подскажите ссылкой или уроком. Есть куча кусков, но одного нормального примера нету. Помогите, а то еще чуть чуть и забьюсь в угол как маленькая девочка, обнимая руками колени.

Probity 13.02.2014 14:45

Должен быть подключен Vk Api к флэшке и авторизован пользователь. Так реализуется отправка файла Вконтакте в моем приложении:

Код AS3:

VK.api('photos.getWallUploadServer',{ uid:  userid },responseFromServer,onError);

userid - номер пользователя (можно получить через friends.get). Если не указано - постит на стенку пользователя. Если постить в группу, то gid: группа.

Для загрузки картинки я использовал класс MultipartURLLoader. Скачать например тут. Ему передаем файл картинки в ByteArray.

Код AS3:

function responseFromServer(data)
                {
                        mll = new MultipartURLLoader();
                        mll.addEventListener(Event.COMPLETE, onUploadCompleteThroughAlarm);
                        mll.addFile(byteArray, "file.jpg", "file1", 'image/jpg');
                        mll.load(data.upload_url);
                }

Картинка загружена Вконтакте. Теперь сохраняем её на стену пользователю.

Код AS3:

function onUploadCompleteThroughAlarm(e:Event)
                {
                        var answer:String = mll.loader.data;
                        var data:Object = JSON.parse(answer);
                        VK.api('photos.saveWallPhoto', {uid: userid, server:data.server, photo:data.photo, hash:data.hash }, onSaveWallPhoto, onError2);
}

Если картинка не сохраняется (например, не берется её ByteArray), то есть большая вероятность, что нарушены правила безопасности флэша.

Lampy 14.02.2014 03:12

все равно не понятно)
откуда взялось :
Код AS3:

mll.load(data.upload_url);

Код AS3:

var data:Object = JSON.parse(answer);

И не понятна работа photos.getWallUploadServer . Я думал нужно обращаться к скрипту.

вот моя писанина не работающая)
Код AS3:

package 
{
  import adobe.utils.CustomActions;
  import flash.display.Sprite;
  import flash.events.DataEvent;
  import flash.media.Microphone;
  import flash.media.Sound;
  import flash.media.SoundChannel;
  import flash.media.SoundTransform;
  import flash.net.drm.LoadVoucherSetting;
  import flash.utils.ByteArray;
  import vk.api.MD5;
  import flash.net.navigateToURL;
  import flash.net.*;
  import flash.display.*;
  import vk.api.serialization.json.JSON;
 
  import flash.utils.getDefinitionByName;
 
  import flash.text.*;
  import vk.APIConnection;
  import vk.events.*;
  import vk.ui.VKButton;
  import flash.display.Loader;
  import flash.display.SimpleButton;
  import flash.display.Sprite;
  import flash.events.Event;       
  import flash.events.MouseEvent;
  import flash.net.URLRequest;
 
        /**
        * ...
        * @author Lampy
        */

        public class Main extends Sprite
        {
                private var flashVars: Object = stage.loaderInfo.parameters as Object;
                private var VK: APIConnection = new APIConnection(flashVars);
 
                private var mll:MultipartURLLoader = new MultipartURLLoader();
                private var pictureBytaArray:ByteArray = new ByteArray();
 
 
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                var btn:VKButton = new VKButton('qqqqqqqqQQqqqq');
                addChild(btn);
                btn.addEventListener(MouseEvent.CLICK, onclics);
 
 
 
                }
 
                private function onclics (e:MouseEvent) : void {
 
                VK.api('photos.getWallUploadServer',{ uid:''},responseFromServers);       
                        }
 
                private function responseFromServers(data)
                {
 
                        mll.addEventListener(Event.COMPLETE, onUploadCompleteThroughAlarm);
                        mll.addFile(pictureBytaArray, "/result1/123211.png", "file1", 'image/jpg');
                        mll.load(data.upload_url);
                }
 
                private function onUploadCompleteThroughAlarm(e:Event)
                        {
                        trace();
                                                }
        }
 
}

Добавлено через 17 часов 28 минут
код сейчас выглядит так но не работает

Код AS3:

 
package
{
  import adobe.utils.CustomActions;
  import flash.display.Sprite;
  import flash.events.DataEvent;
  import flash.geom.Matrix;
  import flash.media.Microphone;
  import flash.media.Sound;
  import flash.media.SoundChannel;
  import flash.media.SoundTransform;
  import flash.net.drm.LoadVoucherSetting;
  import flash.utils.ByteArray;
  import ru.inspirit.image.encoder.JPGEncoder;
  import vk.api.MD5;
  import flash.net.navigateToURL;
  import flash.net.*;
  import flash.display.*;
  import vk.api.serialization.json.JSON;
 
 
  import flash.utils.getDefinitionByName;
 
  import flash.text.*;
  import vk.APIConnection;
  import vk.events.*;
  import vk.ui.VKButton;
  import flash.display.Loader;
  import flash.display.SimpleButton;
  import flash.display.Sprite;
  import flash.events.Event;       
  import flash.events.MouseEvent;
  import flash.net.URLRequest;
 
        /**
        * ...
        * @author Lampy
        */

        public class Main extends Sprite
        {
                private var flashVars: Object = stage.loaderInfo.parameters as Object;
                private var VK: APIConnection = new APIConnection(flashVars);
 
                private var mll:MultipartURLLoader = new MultipartURLLoader();
                private var pictureBytaArray:ByteArray = new ByteArray();
 
                const IMAGE_URL:String = "http://www.helpexamples.com/flash/images/logo.png";
                private var ldr:Loader = new Loader();
                private var bitmap1:Bitmap;
 
                private var fl_Loader = new Loader();
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                var btn:VKButton = new VKButton('qqqqqqqqQQqqqq');
                addChild(btn);
                btn.addEventListener(MouseEvent.CLICK, onclics);
 
                fl_ClickToLoadUnloadSWF();
                ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, ldr_complete);
                ldr.load(new URLRequest(IMAGE_URL));
                }
 
                private function fl_ClickToLoadUnloadSWF():void
                        {
 
                fl_Loader.load(new URLRequest('http://adena-shop.ru/result1/1.png'));
                fl_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, drawImage2);
                        }
 
 
                private function drawImage2(event:Event): void
                        {
                var mySprite:Sprite = new Sprite();
        var myBitmap:BitmapData = new BitmapData(fl_Loader.width, fl_Loader.height, false);
 
        myBitmap.draw(fl_Loader, new Matrix());
                var jpgEncoder:JPGEncoder = new JPGEncoder(100);
                pictureBytaArray = jpgEncoder.encode(myBitmap);
            }
 
 
                private function ldr_complete(evt:Event):void {
                                var bmp:Bitmap = ldr.content as Bitmap;
 
                                bitmap1 = new Bitmap(bmp.bitmapData);
                                } 
 
                private function onclics (e:MouseEvent) : void {
 
                VK.api('photos.getWallUploadServer',{ uid:''},responseFromServers);       
                        }
 
                private function responseFromServers(datas:Object) :void
                {
 
                        mll.addEventListener(Event.COMPLETE, onUploadCompleteThroughAlarm);
                        mll.addFile(pictureBytaArray, "file.jpg", "file1", 'image/jpg');
                        mll.load(datas.upload_url);
 
                }
 
                private function onUploadCompleteThroughAlarm(e:Event) :void
                        {
                        var answer:String = mll.loader.data;
                        var data:Object = JSON.decode(answer);
                        VK.api('photos.saveWallPhoto', {uid: '', server:data.server, photo:data.photo, hash:data.hash }, onSaveWallPhoto);
                                                }
 
                private function onSaveWallPhoto (e:Event) :void {
 
                                                        }                               
        }
 
}


Probity 15.02.2014 18:31

Исходя из этого поста, понял, что банальная загрузка картинки и размещение её на стену Вконтакте вызывает много проблем и ошибок. После трудностей с кодом выше, написал статью со всеми найденными проблемами и способами их решения, если кому интересно.


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

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