AIR: как использовать FileReference.upload () с веб-службами на основе POST (AS3) - PullRequest
0 голосов
/ 18 января 2012

Кажется, я не могу заставить это маленькое приложение AIR работать правильно. На сцене есть одна кнопка, и когда пользователь нажимает ее, ему предоставляется браузер файлов (функция FileReference.browse ()). Когда они выбирают файл изображения, я хочу, чтобы изображение было загружено на сайт imgur.com (http://www.api.imgur.com для тех, кто заинтересован).

Я получаю ответ от imgur, поэтому я знаю, что мое приложение подключается, но оно возвращает ошибку "Не было отправлено данных изображения в API загрузки" Любая помощь с благодарностью! (Также у меня есть API-ключ, я просто удалил его из этого поста по понятным причинам :))

пакет {

import flash.display.MovieClip;
import flash.events.*;
import flash.net.*;
import flash.utils.ByteArray;


public class Document extends MovieClip
{
    //file browser var
    var myFileReference:FileReference = new FileReference();

    //file loader var
    private var loader:URLLoader;

    //string constants
    private const API_KEY:String = "******REMOVED*******";
    private const UPLOAD_URL:String = "http://api.imgur.com/2/upload.xml";

    public function Document()
    {
        // constructor code
        browse_btn.addEventListener(MouseEvent.CLICK, browse);
    }

    function browse(e:MouseEvent)
    {
        var imagesFilter:FileFilter = new FileFilter("Images", "*.jpg;*.gif;*.png");
        myFileReference.browse([imagesFilter]);
        myFileReference.addEventListener(Event.SELECT, selectHandler);
        myFileReference.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, responseHandler);
    }

    function selectHandler(e:Event):void
    {                               
        var vars:String = "?key=" + API_KEY + "&name=name&title=title";
        var params:URLVariables = new URLVariables();
        params.date = new Date();
        var request:URLRequest = new URLRequest(UPLOAD_URL + vars);
        //request.contentType = "application/octet-stream";
         request.contentType = "multipart/form-data";
        request.method = URLRequestMethod.POST;
        request.data = params;

        myFileReference.upload(request);
        try 
        { 
            myFileReference.upload(request); 
        } 
        catch (error:Error) 
        { 
        trace("Unable to upload file."); 
        } 
    }

    function responseHandler(e:DataEvent):void
    {
        trace("responseHandler() initaialized");
        var res:XML = XML(e.data);
        trace(res);
    }
}

}

1 Ответ

1 голос
/ 18 января 2012

на самом деле пример AS3 на их сайте:

package
{
    import com.adobe.images.PNGEncoder;
    import flash.display.BitmapData;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.SecurityErrorEvent;
    import flash.events.IOErrorEvent
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat
    import flash.net.URLRequest;
    import flash.net.URLRequestMethod;
    import flash.utils.ByteArray;

    public class ImgurExample
    {
        private var loader:URLLoader;

        private const API_KEY:String = "<api key>";
        private const UPLOAD_URL:String = "http://api.imgur.com/2/upload.xml";

        public function ImgurExample() {

            loader = new URLLoader();
            loader.dataFormat = URLLoaderDataFormat.VARIABLES;
            loader.addEventListener(Event.COMPLETE, onCookieSent);
            loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
            loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);

            // Create a bitmapdata instance of a movieclip on the stage.
            var mc:MovieClip;
            var b:BitmapData = new BitmapData(mc.width, mc.height, true);
            b.draw(mc);
            var png:ByteArray = PNGEncoder.encode(b);

            var vars:String = "?key=" + API_KEY + "&name=name&title=title";
            var request:URLRequest = new URLRequest(UPLOAD_URL + vars);
            request.contentType = "application/octet-stream";
            request.method = URLRequestMethod.POST;
            request.data = png; // set the data object of the request to your image.

            loader.load(request);
        }
        // privates
        private function onSend(e:Event):void {
            var res:XML = new XML(unescape(loader.data));
            trace(res);
        }
        private function onIOError(e:IOErrorEvent):void {
            trace("ioErrorHandler: " + e);
            // Handle error
        }
        private function onSecurityError(e:SecurityErrorEvent):void {
            trace("securityErrorHandler: " + e);
            // handle error
        }

    }
}

http://api.imgur.com/examples

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...