我在Flash AS3中制作了一个草图板,如下所示:http://henryjones.us/articles/using-the-as3-jpeg-encoder
我想将jpg发送到服务器,并使用php将html表单字段中的一些数据发送到服务器。当按下提交按钮时,有没有办法强制Flash影片传递图像文件?
答案 0 :(得分:5)
这有点棘手:您可以通过以下两种方式之一来实现:
Arthem在另一个帖子中发布了这个:
这对我有很大的帮助: http://www.quietless.com/kitchen/upload-bitmapdata-snapshot-to-server-in-as3/
你需要修改 URLRequestWrapper插入字段 必要时的名称和文件名。 这就是我所做的:
bytes ='Content-Disposition: 形式数据; name =“'+ $ fieldName +'”; 文件名=“';
标题格式最多 所以服务器可以把它理解为 文件上传。
顺便说一句,如果你有一个BitmapData 您可能需要将其编码为JPEG或 PNG优先。
我通常使用这个解决方案:
我没有使用过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将存储在请求的data属性中,我们已经使用它来传递byteArray。
答案 1 :(得分:2)
我想将一个加密的Flash授权代码与JPG图像一起发送到PHP。不适合在get变量中发布这个,所以我就这样绕过它。大多数代码都是阶段快照的实际收集,但只是它的特定区域。与此相关的部分是使用writeMultiByte将加密密码粘贴到jpb图像信息的末尾。然后我使用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);
答案 2 :(得分:0)
您可以使用HTTPService发送数据。 Here's教程排序介绍。
答案 3 :(得分:0)
如果您没有使用flex,请尝试使用URLLoader&& URLrequest,将您的数据作为POST变量传递。
答案 4 :(得分:0)
你可以使用AMFPHP或Zend AMF,我刚刚完成了这样的项目,我的产品允许用户更改产品配色方案,然后将ByteArray数据和其他AS3对象直接输出到PHP,并插入MySQL,你可以see my project和AMFPHP
所有PNG透明图像都是由Flash生成的,然后发送到AMFPHP,PHP然后在服务器上生成PNG文件。