ByteArray
Actionscriptから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に複数の画像とフォームデータを送信する正しい方法は何ですか?