2

关于将图像从 Actionscript 发送到 PHP 的 SO 有很多问题ByteArray,但是,似乎没有一个问题适合我的具体问题。

我想从我的 flash 应用程序中发送一个包含一些文本字段和几个图像的发布请求。

发送一张图片我通过ByteArray直接发送一张图片作为URLRequest's开始工作.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);

我从动作脚本中得到了正确的跟踪,并且边界已经到位。问题是,_screenshotByteArrayand_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-Type为图像尝试了不同的 s ,也尝试了不同的Content-Transfer-Encoding,但这似乎没有生效。

我还考虑过是否只ByteArray使用 base64 对 s 进行编码并在 PHP 端对其进行解码,但这不适用于$_FILES数组,我也无法通过将 base64 编码图像作为普通文本字段发送然后使其工作将它存储到一个文件中,不知何故内容类型搞砸了。

所以,关于将一个编码图像从 Actionscript 发送到 PHP 的所有问题,将多个图像和表单数据从 Actionscript 发送到 PHP 的正确方法是什么?

4

1 回答 1

2

这个类对我有用:https ://github.com/jonasmonnier/Multipart.as

于 2013-11-25T22:51:57.927 回答