2

ByteArrayActionscriptからPHPへの画像の送信を扱うSOに関する質問はかなりありますが、特定の問題に当てはまるものはないようです。

フラッシュアプ​​リケーションから、いくつかのテキストフィールドといくつかの画像を含む1つのPOSTリクエストを送信したいと思います。

1つの画像の送信は、1つの画像をByteArray直接URLRequest'sとして送信することで機能しまし.dataたが、さらに画像を追加したい場合、このアプローチは機能しなくなります。テキストフィールドを使用してを作成して投稿する方法を理解し、PHPの配列multipart/form-dataで使用できるように画像データをマークアップする方法も見つけました。$_FILES

しかし、この方法では、画像ByteArrayデータを正しく送信することができません。

actionscriptでリクエストを作成するこのコードを使用すると、次のようになります。

var request:URLRequest = new URLRequest(uri);
request.method = URLRequestMethod.POST;
request.contentType = "multipart/form-data; boundary=fooboundbar";

var _data:String ="";
_data += "--fooboundbar\n";
_data += "Content-Disposition: form-data; name=\"userId\"\n\n";

_data += _userId + "\n";
_data += "--fooboundbar\n";
_data += "Content-Disposition: form-data; name=\"title\"\n\n";

_data += _title + "\n";
_data += "--fooboundbar\n";
_data += "Content-Disposition: form-data; name=\"screenshot\"; filename=\"screenshot.jpg\"\n";
_data += "Content-Type: image/jpeg\n";
_data += "Content-Transfer-Encoding: binary\n\n";

_data += _screenshotByteArray.toString() + "\n";
_data += "--fooboundbar\n";
_data += "Content-Disposition: form-data; name=\"design\"; filename=\"design.jpg\"\n";
_data += "Content-Type: image/jpeg\n";
_data += "Content-Transfer-Encoding: binary\n\n";

_data += _designByteArray.toString() + "\n";
_data += "--fooboundbar\n";
_data += "Content-Disposition: form-data; name=\"test\"\n\n";

_data += "test\n";
_data += "--fooboundbar--";

request.data = _data;

trace(_data);

境界が設定されたactionscriptから適切なトレースを取得します。問題は、_screenshotByteArrayデータ_designByteArrayに改行が含まれているため、投稿全体が混乱することです。リクエストは基本的にの最初の行の後で終了し_screenshotByteArray、2番目の画像も最後の「テスト」フォームデータフィールドも含まれません。

私のPHPスクリプトのvar_dumpは、これを確認します。

array(2) {
  ["userId"]=>
  string(1) "0"
  ["title"]=>
  string(9) "undefined"
}

array(1) {
  ["screenshot"]=>
  array(5) {
    ["name"]=>
    string(14) "screenshot.jpg"
    ["type"]=>
    string(0) ""
    ["tmp_name"]=>
    string(14) "/tmp/phpXZxIqg"
    ["error"]=>
    int(0)
    ["size"]=>
    int(8)
  }
}

["size"] => int(8);にも注意してください。これは基本的に最初の8ビット、つまり画像のByteArrayの最初の行です。

Content-Type画像に対して別のを試しましたが、別のを試しましたContent-Transfer-Encodingが、効果がないようです。

ByteArrayまた、 sをbase64でエンコードし、PHP側でデコードするかどうかも検討しましたが、$_FILES配列では機能しませんでした。また、base64でエンコードされた画像を通常のテキストフィールドとして送信してから機能させることもできませんでした。それをファイルに保存します、どういうわけかコンテンツタイプはそれで台無しになりました。

それで、ActionscriptからPHPに1つのエンコードされた画像を送信することに関するすべての質問で、ActionscriptからPHPに複数の画像とフォームデータを送信する正しい方法は何ですか?

4

1 に答える 1

2

このクラスは、このケースで私のために働いています: https://github.com/jonasmonnier/Multipart.as

于 2013-11-25T22:51:57.927 に答える