1

現在のプロジェクトに as3 を使用しています。ログイン、Twitter への投稿ステータスは既に完了しています。しかし、update_with_media に問題があります。これが私のプログラムの流れです。別の画面では CaptureWebcam と呼ばれ、ユーザーは Web カメラから写真をキャプチャできますが、ユーザーのコンピューターに保存することはできません。また、ユーザーが Twitter 画面への共有を開いた場合、ログインするためのポップアップが表示され、CaptureWebcam 画面からの画像が Twitter 画面に渡され、アップロードの準備ができて投稿に失敗しました...コードの何が問題なのかわかりません

ここに私のコードがあります、私はiotashanライブラリを使用しています

private function uploadImage(Image()):void {
            var myEncoder:JPGEncoder = new JPGEncoder(80);
            var urlLoader:URLLoader = new URLLoader();
            var urlRequest:URLRequest;
            var multipartLoader:MultipartURLLoader = new MultipartURLLoader();
            var urlHeader:URLRequestHeader = new URLRequestHeader();

            var oAuth:OAuthRequest;
            var consumer:OAuthConsumer;
            var twitterRequestUrl:String;
            var headerValue:String = "";
            var auth_header:URLRequestHeader;
            var param:Object;
            var vid:Video;

            //var bmp:Bitmap = new Bitmap();
            var bitmapData:BitmapData = new BitmapData(CaptureWebcam.vid.width, CaptureWebcam.vid.height, true, 0xFFFFFF);
            //var byteArray:ByteArray = myEncoder.encode(new Bitmap(new Turtle()).bitmapData);
            var byteArray:ByteArray = myEncoder.encode(bitmapData);

            var drawRect:Rectangle = new Rectangle(0,0,image.width, image.height);
            bitmapData.draw(image, new Matrix(), null, null, drawRect, true);

            trace("upload test");
            //header create
            twitterRequestUrl = "https://api.twitter.com/1.1/statuses/update_with_media.json";
            consumer = new OAuthConsumer(consumerKey, consumerSecret);
            oAuth = new OAuthRequest(OAuthRequest.HTTP_MEHTOD_POST, twitterRequestUrl, null, consumer, null);
            urlRequest = new URLRequest(oAuth.buildRequest(new OAuthSignatureMethod_HMAC_SHA1()));
            //

            /*
            urlRequest = twitterRequestUrl;
            urlRequest.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary();
            urlRequest.method = URLRequestMethod.POST;
            urlRequest.data = UploadPostHelper.getPostData(file, byteArray);
            urlRequest.requestHeaders.push( new URLRequestHeader( 'Cache-Control', 'no-cache' ) );

            urlLoader.dataFormat = URLLoaderDataFormat.BINARY
            urlLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, onStatusDelivered);
            urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, onStatusChanged);
            urlLoader.addEventListener(Event.COMPLETE, handleUploadComplete);
            urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
            urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
            urlLoader.load(urlRequest);
            */


            /*
            multipartLoader.addEventListener(Event.COMPLETE, handleUploadComplete);
            multipartLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
            multipartLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSequrityError);
            multipartLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, onStatusDelivered);
            */

            /*
            headerValue = createHeaderValue(oAuth);
            auth_header = new URLRequestHeader("Authorization", headerValue);
            multipartLoader.requestHeaders.push(auth_header);
            multipartLoader.addVariable("status" , "test");
            multipartLoader.addFile(byteArray, 'image.jpg', 'media[]');
            multipartLoader.load("https://api.twitter.com/1.1/statuses/update_with_media.json");
            */


            var signedData:String = oauth.getSignedRequest( URLRequestMethod.POST, "https://upload.twitter.com/1/statuses/update_with_media.json", null );
            var authHeaderValue:String = createAuthorizationHeader( new URLVariables( signedData ) );

            // create multipart loader

            var multipartLoader : MultipartURLLoader = new MultipartURLLoader();
            multipartLoader.addEventListener( Event.COMPLETE, handleUploadComplete );   
            multipartLoader.addEventListener( IOErrorEvent.IO_ERROR, onError );
            multipartLoader.addEventListener( SecurityErrorEvent.SECURITY_ERROR, onError ); 

            // add headers

            var auth_header : URLRequestHeader = new URLRequestHeader( "Authorization", authHeaderValue );
            multipartLoader.requestHeaders.push( auth_header );

            // add requeried data

            multipartLoader.addVariable( "status" , twitter_msg );
            multipartLoader.addFile( byteArray, 'image.jpg', 'media[]');    

            // load

            multipartLoader.load( "https://upload.twitter.com/1/statuses/update_with_media.json" );
}

private function createAuthorizationHeader( _requestParams : Object, headerRealm : String = "" ) : String
{
var data:String = "";

    data += "OAuth "
    if ( headerRealm.length > 0)
    data += "realm=\"" + headerRealm + "\", ";

    for (var param : Object in _requestParams ) {
      // if this is an oauth param, include it
        if ( param.toString().indexOf("oauth") == 0){
        data += param + "=\"" + encodeURIComponent( _requestParams[param]) + "\", ";
        }
    }

    return data.substr( 0, data.length - 2);
}
4

0 に答える 0