Форум Flasher.ru

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

ЗлОй ПрОграММер 19.11.2011 15:20

добавить несколько фотографий на стену
 
Знаю как загружать картинки в альбом
1. получаю photos.getUploadServer => uploadUrl
2. формирую запрос
Код AS3:

public function uploadPhotos(): void
{       
        var barr: ByteArray;
        barr = new ByteArray();
        barr = photo1.getBitmapByteArray(false);
        multipartURLLoader.addFile(barr, "file1.jpg", 'file1');       
        barr = photo2.getBitmapByteArray(false);
        multipartURLLoader.addFile(barr, "file2.jpg", 'file2');       
        barr = photo3.getBitmapByteArray(false);
        multipartURLLoader.addFile(barr, "file3.jpg", 'file3');       
        multipartURLLoader.load(uploadUrl);
        multipartURLLoader.clearFiles();
}

3. сохраняю
Код AS3:

private function savePhotos(e: Event): void 
{       
        var data: Object = JSON.decode(multipartURLLoader.loader.data);
        VK.api('photos.save', {aid: albumAid, server: data.server,
                                      photos_list: data.photos_list, hash:data.hash},
                                      savePhotosTrue, savePhotosFalse);
}

теперь нада изменить код чтобы добавить картинки на стену
ну 1 это понятно photos.getUploadServer меняю на => photos.getWallUploadServer
а как 2 и 3 изменить ?
тут читал но пример вроде как для одной картинки, а как быть если сразу 3 надо загрузить как в моём случае ?
http://vk.com/developers.php?oid=-1&...BA%D1%82%D0%B5

Dima998 19.11.2011 23:13

проблема в том, что photos.saveWallPhoto в вашем случае вместо photos.save, сохраняет только одну фотографию. поэтому вам придется по отдельности загружать так:
photos.getWallUploadServer -> загружаете файл с полем фото (multipartURLLoader.addFile(barr, "file1.jpg", 'photo'); -> photos.saveWallPhoto -> потом получаете id фотографии и запоминаете его например в массиве -> повторяете эту операцию нужное количество раз -> методом wall.post постим с параметром owner_id (id пользователя) и в параметре attachments указываете из массива id фотографий разделенные через запятую. попробуете, отпишитесь, ок?

ЗлОй ПрОграММер 20.11.2011 11:15

(multipartURLLoader.addFile(barr, "file1.jpg", 'photo') а тут наверн каждый раз придётся жать кнопку перед загрузкой ?
как же тогда приложения типа фотостатус.рф загружают картинки сразу ?
попробую, жалко всё таки что несколько фотографий нельзя загрузить сразу
отпишусь потом

Dima998 20.11.2011 13:59

вот нашел из вашей темы обходной путь: http://www.flasher.ru/forum/showpost...6&postcount=11
чтоб не загружать по кнопке.

ЗлОй ПрОграММер 20.11.2011 14:14

да да и забыл совсем спасибо, ща уже демку делаю

Добавлено через 55 минут
а что такое MultipartData.BOUNDARY ? где найти ? отдельный класс скачивать

multipartURLLoader.addFile(byteArrays[0], "file1.jpg", 'photo'); как это исправить ?


вообщем скачал класс MultipartData, поменял
Код AS3:

//urlRequest.contentType = 'multipart/form-data; boundary=' + getBoundary();
urlRequest.requestHeaders.push(new URLRequestHeader("Content-type", "multipart/form-data; boundary=" + MultipartData.BOUNDARY));

загрузил byteArray, пришёл ответ
Код AS3:

{"mid": "мой id", "gid": "0", "server": "9641", "photo": "", "hash": "7c499ba6adc6e7234e6aba9ba93c3d52"}

как видно в photo пусто

вот сам класс MultipartData
Код AS3:

////////////////////////////////////////////////////////////////////////////////
//
//  Copyright 2009 Vitali Sosnovski
//
//  NOTICE: You may distribute this class freely,
//  provided it is not modified in any way (including
//  removing this header or changing the package path).
//
//  Please contact udaaff[at]gmail.com prior to distributing
//  modified versions of this class.
//
////////////////////////////////////////////////////////////////////////////////
 
package
{
 
    import flash.utils.ByteArray;
 
    public class MultipartData
    {
 
        public static const BOUNDARY:String = "----------cH2gL6ei4Ef1gL6GI3Ij5Ef1Ef1Ef1";
        private static const CRLF:String = "\r\n";
        private static const HYPHENS:String = "--";
 
 
        //--------------------------------------------------------------------------
        //
        //  Constructor
        //
        //--------------------------------------------------------------------------
 
        public function MultipartData()
        {
            super();
        }
 
        //--------------------------------------------------------------------------
        //
        //  Variables
        //
        //--------------------------------------------------------------------------
 
 
 
        //--------------------------------------------------------------------------
        //
        //  Properties
        //
        //--------------------------------------------------------------------------
 
 
 
        //----------------------------------
        //  data
        //----------------------------------
 
        private var _data:ByteArray = new ByteArray();
 
        public function get data():ByteArray
        {
            var d:ByteArray = new ByteArray();
            d.writeBytes(_data);
            d.writeUTFBytes(HYPHENS + BOUNDARY + HYPHENS);
            return d;
        }
 
        //--------------------------------------------------------------------------
        //
        //  Methods
        //
        //--------------------------------------------------------------------------
 
        public function addFile(file:ByteArray, name:String, fileName:String = "name.jpg"):void
        {
          // _data.writeUTFBytes(HYPHENS + BOUNDARY + CRLF);
          // _data.writeUTFBytes("Content-Disposition: form-data; name=filename");
            _data.writeUTFBytes(HYPHENS + BOUNDARY + CRLF);
            _data.writeUTFBytes("Content-Disposition: form-data; name=" + name + "; filename=" + fileName + CRLF);
//            _data.writeUTFBytes("Content-Disposition: form-data; name=" + name + CRLF); без filename возвращает invalid photo
            _data.writeUTFBytes("Content-Type: application/octet-stream" + CRLF + CRLF);
            _data.writeBytes(file);
            _data.writeUTFBytes(CRLF);
        }
 
        public function clear():void
        {
        //  _data.clear();
        }
 
    }
 
}


Dima998 20.11.2011 16:49

не в тему но все же - какая у Вас версия flash плеера?
у меня почему-то не прокатывает MultipartData.BOUNDARY
может они уже обновили безопасность в плеере, у меня flash плеер 11
а по кнопке загружает и с полем photo и с полем file1(multipartURLLoader.addFile(byteArrays[0], "file1.jpg", 'photo'); и multipartURLLoader.addFile(byteArrays[0], "file1.jpg", 'file1');
все таки обход этот мы нашли еще полтора года назад

ЗлОй ПрОграММер 20.11.2011 17:21

так мне надо чтоб не по кнопке загружало, а сразу
насчёт плеера не помню какая версия, неделю назад обновлял

у вас есть пример рабочего кода чтобы картинка загружалась не по нажатию кнопки ????

ЗлОй ПрОграММер 24.11.2011 00:40

вообщем получилось несколько фоток грузить, multipartURLLoader.addFile(barr, "file1.jpg", 'file1') тоесть поле не photo, а file1 нужно делать
до 6 фоток можно за раз загрузить

Dima998 24.11.2011 23:54

понятно, то есть проблема решена...

ЗлОй ПрОграММер 25.11.2011 02:11

да, решена, спасиб за помощь


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

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