如何将带有图像的字节数组从AS3发送到PHP?

时间:2016-04-22 15:18:35

标签: php actionscript-3 flash air bytearray

我从AS3 AIR App发送图像,将其余的POST参数发送到PHP脚本,其余部分将完成。我想以某种方式将带有图像的字节数组转换为字符串并使用base64对其进行编码。我是成功的,但图像数据是错误的。

以下是我用来转换它的代码:

...
//BA1 is Byte Array with an image in it
var data:String = BA1.toString();
OutSql.push({t: "b1", v: Base64.encode(data)});
...

一切正常,这些数据被发送到服务器,解码并存储为图像,但图像错误。不知何故它大概是40 kb,而当我在Air应用程序中保存它是22 kb。有什么想法吗?

P.S。我知道我可以保存它并上传它,但我真的需要这样做。此外,BA1.readUTF()生成错误,因此不是选项。

加成

在服务器端,我在写入文件之前尝试使用utf8_decode字符串,不知怎的,我得到了一个尺寸合适的图像,但是...那个图像不是我想要的,它看起来像涂鸦...

2 个答案:

答案 0 :(得分:3)

import com.sociodox.utils.Base64;
.....
//BA1 is ByteArray with an image encoded
var enc_image=Base64.encode(BA1);
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT;
var request:URLRequest = new URLRequest("some.php");
var variables:URLVariables = new URLVariables();
variables.decode("image="+enc_image);
request.method = URLRequestMethod.POST;
request.data = variables;
loader.load(request);

当然,也要设置你的听众......

in" some.php":

$imageData = base64_decode(str_replace(" ", "+", $_POST['image']));
$fh = fopen("path/to/image/somename.jpg", "wb");
fwrite($fh, $imageData);
fclose($fh);

这就像一个魅力:)

答案 1 :(得分:1)

发现了灵魂。我从http://www.sociodox.com/base64.html Base64.swc下载了,它实际上是编码和解码图像字节数组。因为我的字符串是JSON-ed(作为发送给PHP的对象的一部分)我只需要将空格转换为'+'并解码它并写入文件 - 工作完美!案件结案。