如何将ByteArray(从Flash)和一些表单数据发送到php?

如何将ByteArray(从Flash)和一些表单数据发送到php?,php,flash,actionscript-3,input,jpeg,Php,Flash,Actionscript 3,Input,Jpeg,我有一个用Flash AS3制作的画板,如下所示: 我想用php将jpg和一些来自html表单字段的数据发送到服务器。有没有办法在按下提交按钮时强制Flash电影发送图像文件?您可以使用发送数据。教程排序介绍。如果您不使用flex,请尝试URLLoader和URLRESQUEST,将数据作为POST变量传递。这有点棘手:您可以使用以下两种方法之一: Arthem在另一个帖子中发布了此消息: 这对我帮助很大: 您需要修改 URLRequestWrapper以插入字段 名称和文件名(如果需要)。

我有一个用Flash AS3制作的画板,如下所示:


我想用php将jpg和一些来自html表单字段的数据发送到服务器。有没有办法在按下提交按钮时强制Flash电影发送图像文件?

您可以使用发送数据。教程排序介绍。

如果您不使用flex,请尝试URLLoader和URLRESQUEST,将数据作为POST变量传递。

这有点棘手:您可以使用以下两种方法之一:

Arthem在另一个帖子中发布了此消息:

这对我帮助很大:

您需要修改 URLRequestWrapper以插入字段 名称和文件名(如果需要)。 以下是我所做的:

字节='内容处置: 表格数据;name=“+$fieldName+”; filename=“”

它对标题进行了最多的格式化 因此服务器可以将其理解为 文件上传

顺便说一下,如果您有BitmapData 您可能需要将其编码为JPEG或 首先是巴布亚新几内亚

我通常使用这个解决方案:

我没有使用imageshack API,但您可能想尝试使用adobe的JPGEncoder类-下面是一个传递用户名和JPG字节数组的快速示例,非常简单

private function savePicToServer(bmpData:BitmapData):void
{
    var jpgEncoder:JPGEncoder = new JPGEncoder(85);
    var jpgStream:ByteArray = jpgEncoder.encode(bmpData);

    var loader:URLLoader = new URLLoader();
        configureListeners(loader);

    var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
    var request:URLRequest = new URLRequest(ModelLocator.BASE_URL + ModelLocator.UPLOAD_URL + "?user=" + ModelLocator.getInstance().username);
    request.requestHeaders.push(header);
    request.method = URLRequestMethod.POST;
    request.data = jpgStream;
    loader.load(request);
}

请注意,变量是作为查询字符串的一部分传递的。正如一些人所建议的那样,您不能使用URLVariables,因为URLVariables将存储在请求的数据属性中,我们已经在使用该属性来传递byteArray。

我想将加密的授权代码表单Flash与JPG图像一起发送给PHP因为不适合在get变量中发布此内容,所以我采用了这种方式。大多数代码都是一个阶段快照的实际收集,但只是其中的一个特定区域。与此相关的部分是使用writeMultiByte将加密密码固定到jpb图像信息的末尾。然后我发送此密码的长度ord使用get变量url字符串,让PHP知道要切掉多少结尾

var stage_snapshot:BitmapData = new BitmapData(600, 120);
var myRectangle:Rectangle = new Rectangle(0, 0, 600, 120);
var myMatrix:Matrix = new Matrix();
var translateMatrix:Matrix = new Matrix();
translateMatrix.translate(-101, -33);
myMatrix.concat(translateMatrix);
stage_snapshot.draw(stage,myMatrix,null,null,myRectangle);
trace ("creating JPGEncoder");
// Setup the JPGEncoder, run the algorithm on the BitmapData, and retrieve the ByteArray
var encoded_jpg:JPGEncoder = new JPGEncoder(100);
var jpg_binary:ByteArray = new ByteArray();
jpg_binary = encoded_jpg.encode(stage_snapshot);
var pw = cryptoSalt.encrypt("mysecretpassword");
**var pwLength = pw.length;
jpg_binary.writeMultiByte(pw,"us-ascii");**
trace ("stage snapshot taken");
var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
var request:URLRequest = new URLRequest("savejpg.php?length1=" + pwLength);
request.requestHeaders.push(header);
request.method = URLRequestMethod.POST;
request.data = jpg_binary;
var loader:URLLoader = new URLLoader();
trace ("sending pic to php");
loader.load(request);
loader.addEventListener(Event.COMPLETE,finishSave);
接收PHP:

$pwlength = $_GET['length1'];
$jpg = $GLOBALS["HTTP_RAW_POST_DATA"];
$pw = substr($jpg, - $pwlength);
$jpg = substr($jpg,0,strlen($jpg) - $pwlength);
$filename = 'uploads/test.jpg';
file_put_contents($filename, $jpg);
file_put_contents("uploads/pw.txt",$pw);

您可以使用AMFPHP或Zend AMF,我刚刚完成了这样一个项目,我的产品允许用户更改产品颜色方案,然后将ByteArray数据和其他AS3对象直接输出到PHP,并插入MySQL,您可以


所有PNG透明图像都由Flash生成,并发送到AMFPHP、PHP,然后在服务器上生成PNG文件。

谢谢!…我以前从未使用过Flex。我会尝试。我已经这样做了。问题是:我想在旁边发布一些表单数据。