【发布时间】:2013-02-11 14:13:26
【问题描述】:
关于将图像ByteArrays 从 Actionscript 发送到 PHP 的 SO 有很多问题,但是,似乎没有一个适合我的具体问题。
我想从我的 Flash 应用程序中发送一个帖子请求,其中包含一些文本字段以及几张图像。
发送一张图片我通过将一张图片的ByteArray直接发送为URLRequest的.data来工作,但是当我想添加更多图片时,这种方法不再起作用。我弄清楚了如何构造和发布带有文本字段的multipart/form-data,还发现了如何标记图像数据,以便它们可以在 PHP 的$_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);
我从动作脚本中获得了正确的跟踪,并且边界已经到位。问题是,_screenshotByteArray 和 _designByteArray 数据包含换行符,这会弄乱整个帖子。该请求基本上在_screenshotByteArray 的第一行之后结束,并且不包括第二个图像,也不包括最后一个“测试”表单数据字段。
我的 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-Types,也尝试了不同的Content-Transfer-Encoding,但似乎没有生效。
我还考虑过是否只使用 base64 对 ByteArrays 进行编码并在 PHP 端对其进行解码,但这不适用于 $_FILES 数组,我也无法通过发送 base64 来使其工作将图像编码为普通文本字段,然后将其存储到文件中,不知何故内容类型搞砸了。
那么,关于将一个编码图像从 Actionscript 发送到 PHP 的所有问题,将多个图像和表单数据从 Actionscript 发送到 PHP 的正确方法是什么?
【问题讨论】:
-
您忘记在“设计”文件中添加
--fooboundbar分隔符,这意味着它的数据实际上是“屏幕截图”的一部分。 -
@MarcB 哦,你是对的!但这只是一个应对错误。我仔细检查并在我的实际代码中存在它;这也不能解释为什么所有到达 PHP 的屏幕截图文件都是 8 位的。我将更新问题中的代码示例。
标签: php image actionscript-3 post multipartform-data