我正在尝试将位图图像的编码数据发送到服务器并返回到(或单独的)客户端。使用套接字或其他东西可能有一种更简单的方法,但我是一个非常随意的,仍然是一个非常新的程序员,我无法理解其他方法。编码和解码工作正常,我可以保存并打开编码的png,但在php / mysql端的某处,编码数据丢失了大部分代码。
用于将编码数据发送到php的Actionscript代码。
var req:URLRequest = new URLRequest("http://host.net//img.php");
req.method = URLRequestMethod.POST;
var loader:URLLoader = new URLLoader;
var phpvar = new URLVariables();
var shape:MovieClip = new MovieClip();
shape.graphics.beginFill(0xFF0000);
shape.graphics.drawRect(0, 0, 100, 100);
addChild(shape);
var bmp:BitmapData = new BitmapData(500, 350);
bmp.draw(shape);
var byte:ByteArray = new ByteArray();
bmp.encode(new Rectangle(0,0, 100, 100), new flash.display.PNGEncoderOptions(false), byte);
//save on database
phpvar.bytez = byte;
req.data = phpvar;
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.load(req);
trace(req.data.bytez);
跟踪输出为:
PNG
- >
IHDRddÿIDATxÚíÐ1μçYÁÏ“Ð)®F,Y²dɒ¥@,Y²dÉR K,Y²d)%K,Y²Ȓ%K,Ydɒ%K,ɒdɒ%KY²dɒ%K,Y²dɒ¥@,Y²dÉR K,Y²d)%K,Y²Ȓ%K,Ydɒ%K,ɒdɒ%KY²dɒ%K,Yß^Çjú··IEND®B`
收到数据的Actionscript代码:
var req = new URLRequest("http://host.net//imgsend.php");
var loader = new URLLoader(req);
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, onComplete);
loader.load(req);
function onComplete(e:Event) {
var loaderer:Loader = new Loader();
var byte:ByteArray = new ByteArray()
byte = e.target.data;
trace(byte);
}
跟踪输出为:
PNG
- >
由于某种原因,它知道编码数据是针对PNG的,但所有的都是标头。我认为问题出在我的php / mysql代码中,但我不完全确定。为方便起见,我使用phpMyAdmin的免费虚拟主机服务,Images表只是一个BLOB列,php文件上传到主机服务器上。
用于读取和插入mysql(img.php)的PHP代码
<?php
mysql_connect($mysql_host, $mysql_user, $mysql_password);
mysql_select_db($mysql_database) or die(mysql_error());
$pic = $_POST['bytez'];
$sql = "INSERT INTO Images (img) VALUES ('$pic')";
mysql_query($sql);
?>
用于从服务器获取数据并将其发送到Actionscript(imgsend.php)的PHP代码
<?php
mysql_connect($mysql_host, $mysql_user, $mysql_password);
mysql_select_db($mysql_database) or die(mysql_error());
$sql = "SELECT * FROM Images";
$records = mysql_query($sql);
while($byte=mysql_fetch_assoc($records)){
echo $byte['img'];
}
?>
答案 0 :(得分:0)
我没有找到这个确切方法的答案,但我找到了另一种解决方案,即将文件直接写入目录。从我所看到的,无论如何,这更有效。代码基本相同,只是我添加了URLcontentType并扩展了文件位置的URL请求地址的URL。
var req:URLRequest = new URLRequest("http://host.net//img.php?filename=something.png");
req.method = URLRequestMethod.POST;
req.contentType = "application/octet-stream";
var loader:URLLoader = new URLLoader;
var shape:MovieClip = new MovieClip();
shape.graphics.beginFill(0xFF0000);
shape.graphics.drawRect(0, 0, 100, 100);
addChild(shape);
var bmp:BitmapData = new BitmapData(500, 350);
bmp.draw(shape);
var byte:ByteArray = new ByteArray();
bmp.encode(new Rectangle(0,0, 100, 100), new flash.display.PNGEncoderOptions(false), byte);
//save on database
req.data = byte;
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.load(req);
PHP代码适用于img.php:
<?php
$fileName = $_GET['filename'];
$fp = fopen( $fileName, 'wb' );
fwrite( $fp, $GLOBALS['HTTP_RAW_POST_DATA'] );
fclose( $fp );
?>
加载文件很简单,不打算发帖。我将自己处理独特的文件名,宝贝步骤。谢谢你帮我说说了一些!