2

私のAS3 Flashコードには、JPGEncoderを使用してswf内のスクリーンショットを撮り、PHPのファイルに書き込むURLに送信する次のコードがあります。

最近、機能が停止し、ページがリダイレクトに失敗する Google Chrome Pepperflash の問題に遭遇しました。save.php には何も送信されません。変えることで

var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");

var header:URLRequestHeader = new URLRequestHeader ("Content-type", "text/plain");

それはトリックを行うように見えました。現在、これは Internet Explorer では機能しますが、Chrome、Safari、Firefox では機能しなくなりました。昨日、Adobe が Flash と Flash Player のアップデート/パッチを公開したのを見ましたが、何か関係があるのでしょうか?

以下を削除すると:

var header:URLRequestHeader = new URLRequestHeader ("Content-type", "text/plain"); 
jpgURLRequest.requestHeaders.push(header);   

その後、ページは正常にリダイレクトされます$GLOBALS['HTTP_RAW_POST_DATA']が、空になるため、画像ファイルを作成できません。

これを解決するために私が置くことができる代替ヘッダーはありますか?

私のコードは次のとおりです。

AS3:

function createJPG(m:MovieClip, q:Number, fileName:String) {
    var jpgSource:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight);
    jpgSource.draw(stage);
    var jpgScreenshot: BitmapData = new BitmapData(362, 310);
    jpgScreenshot.copyPixels(jpgSource, new Rectangle(288, 89, 362, 310), new Point(0, 0));
    var jpgEncoder:JPGEncoder = new JPGEncoder(q);
    var jpgStream:ByteArray = jpgEncoder.encode(jpgScreenshot);

    var header:URLRequestHeader = new URLRequestHeader ("Content-type", "text/plain");

    var jpgURLRequest:URLRequest = new URLRequest ("http://www.url.com/save.php");      
    jpgURLRequest.requestHeaders.push(header);              
    jpgURLRequest.method = URLRequestMethod.POST;               
    jpgURLRequest.data = jpgStream;
    var jpgURLLoader:URLLoader = new URLLoader();   
    navigateToURL(jpgURLRequest, "_self");
}

save.php

$imagefile=''.$imageURL.'';
$fp = fopen($imagefile, 'wb');
fwrite($fp, $GLOBALS['HTTP_RAW_POST_DATA']);
fclose($fp);

header('Location: https://www.url.com/your-image.php');
4

3 に答える 3

1

Flash Player バージョン 13.0.0.214 では、いくつかの重要なセキュリティ修正が導入されています。残念ながら、navigateToUrl() に指定されたリクエストのヘッダーの変更を禁止することで、navigateToUrl() も壊れます。これにより、例で行ったように、セキュリティ/セッション トークン ヘッダーを渡す必要がある、またはコンテンツ タイプを text/xml などに変更する必要がある POST 要求が中断されます。

現時点で最もよく知られている回避策は、クライアントを 13.0.0.206 にダウングレードすることです。

于 2014-05-15T15:51:42.973 に答える
0

アドビは、ここで説明されているように外部インターフェイス呼び出しを使用することを提案しています: https://forums.adobe.com/message/6396080 JavaScript を使用して POST メソッドを置き換えます。

ただし、odd_duck によって提案された解決策はより単純に思えます。php コードも参照してください。

于 2014-05-21T00:00:12.953 に答える