使用Actionscript中的图像文件将多部分/表单数据发送到PHP

时间:2013-02-11 14:13:27

标签: php image actionscript-3 post multipartform-data

在SO上有很多关于将图像ByteArray从Actionscript发送到PHP的问题,然而,似乎没有一个问题适合我特定的问题。

我想从我的Flash应用程序发送一个帖子请求,其中包含一些文本图片和几张图片。

通过直接将ByteArray URLRequest作为.data multipart/form-data发送一张图片来发送一张图像,但是当我想添加更多图片时,此方法并非如此再努力了。我想出了如何使用文本字段构建和发布$_FILES,还找到了如何标记图像数据,以便它们可以在PHP的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数据包含换行符,这会破坏整个帖子。请求基本上在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) } } 的第一行之后结束,并且不包括第二个图像,也不包括最后一个“test”表单数据字段。

我的PHP脚本中的var_dump确认了这一点:

Content-Type

另请注意[“size”] => int(8);这基本上是前8位,即图像的ByteArray的第一行。

我为图片尝试了不同的Content-Transfer-Encoding s,也尝试了不同的ByteArray,但这似乎没有生效。

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

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

1 个答案:

答案 0 :(得分:2)

本课程适合我这个案例:https://github.com/jonasmonnier/Multipart.as