php - 将带有图像文件的多部分/表单数据从 Actionscript 发送到 PHP

标签 php image actionscript-3 post multipartform-data

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

我想从我的 Flash 应用程序发送一个发布请求,其中包含一些文本字段以及多个图像。

发送一张图像我通过发送一张图像的 ByteArray 来工作。直接作为URLRequest.data ,但是当我想添加更多图像时,这种方法就不再起作用了。我弄清楚如何构建并发布 multipart/form-data与文本字段,还找到了如何标记图像数据,以便它们可以在 PHP 的 $_FILES 中使用数组。

但是用这个方法,我无法获取图像ByteArray数据正确发送。

使用此代码在操作脚本中构造请求:

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 第一行之后结束并且不包括第二个图像或最后一个“测试”表单数据字段。

我的 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 发送一张编码图像的所有问题,从 Actionscript 向 PHP 发送多张图像和表单数据的正确方法是什么?

最佳答案

这个类(class)对我来说适用于这种情况:https://github.com/jonasmonnier/Multipart.as

关于php - 将带有图像文件的多部分/表单数据从 Actionscript 发送到 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14813777/

相关文章:

php - 使用 Android Studio 和 PHP 的 Android 到 Wamp 服务器连接

php - 静态值不显示(COUNT、UNION ALL 查询)

actionscript-3 - Actionscript 3 ByteArray 异或?

apache-flex - 在 Flex 中转换到接口(interface)时出现问题

actionscript-3 - 通过 SSL 连接调用 Web 服务时出现错误 #2032 : Stream Error.

javascript - Trustpilot cross-origin error with carousel integration

php - real_escape_string 与准备好的语句

java - 保存文件Java时出现空指针异常

html - 如何使用 HTML 和 CSS 创建倾斜条纹设计

javascript - 如何在加载后使用 javascript 获取 <img> 内容类型