发送和接收PNGencoded到php mysql BLOB

时间:2015-05-26 15:11:37

标签: php mysql algorithm actionscript-3 flash

我正在尝试将位图图像的编码数据发送到服务器并返回到(或单独的)客户端。使用套接字或其他东西可能有一种更简单的方法,但我是一个非常随意的,仍然是一个非常新的程序员,我无法理解其他方法。编码和解码工作正常,我可以保存并打开编码的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'];

}

?>

1 个答案:

答案 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 );

?>

加载文件很简单,不打算发帖。我将自己处理独特的文件名,宝贝步骤。谢谢你帮我说说了一些!