por - ¿Cómo puedo enviar un ByteArray(desde Flash) y algunos datos de formulario a php?
formularios hechos en php (5)
Puede usar un servicio HTTPS para enviar datos. Aquí hay una introducción de tipo tutorial.
Tengo un bloc de bocetos hecho en Flash AS3 como este aquí: http://henryjones.us/articles/using-the-as3-jpeg-encoder
Quiero enviar el jpg al servidor y algunos datos de un campo de formulario html con php. ¿Hay alguna manera de obligar a la película Flash a entregar el archivo de imagen cuando uno presiona el botón de enviar?
Si no está utilizando flex, intente URLLoader && URLrequest, para pasar sus datos como una variable POST.
Quería enviar un código de autorización encriptado de Flash a PHP junto con una imagen JPG. No era adecuado publicar esto en las variables get, así que lo solucioné de esta manera. La mayor parte del código es la recopilación real de una instantánea de escenario, pero solo una región específica de ella. La parte que es relevante aquí es el uso de writeMultiByte para virar en la contraseña cifrada hasta el final de la información de la imagen jpb. Luego envío la longitud de esta contraseña usando la cadena de URL get variables para que PHP sepa mostrar mucho para cortar el final.
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);
El PHP receptor:
$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);
es un poco complicado: puedes hacerlo de dos maneras:
Arthem publicó esto en otro hilo:
Esto fue de gran ayuda para mí: http://www.quietless.com/kitchen/upload-bitmapdata-snapshot-to-server-in-as3/
Necesita modificar el URLRequestWrapper para insertar nombres de campo y nombres de archivos donde sea necesario. Esto es lo que hice:
bytes = ''Content-Disposition: form-data; name = "''+ $ fieldName +''"; filename = "'';
Hace la mayoría del formato de encabezados para que el servidor pueda entenderlo como una carga de archivos.
Por cierto, si tienes un BitmapData, es posible que tengas que codificarlo en JPEG o PNG primero.
Y usualmente uso esta solución:
No he usado la API imageshack, pero es posible que desee probar el uso de la clase JPGEncoder de adobe. Aquí hay un ejemplo rápido que transmite un nombre de usuario y la matriz de bytes del JPG, es realmente bastante simple.
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);
}
Tenga en cuenta que las variables se pasan como parte de la cadena de consulta. No puede usar URLVariables, como han sugerido varias personas, ya que las URLVariables se almacenarían en la propiedad de datos de la solicitud, que ya estamos utilizando para pasar el archivo byteArray.
Puedes usar AMFPHP o Zend AMF, acabo de terminar un proyecto como este, mi producto permite a un usuario cambiar el esquema de colores de un producto y luego enviar los datos de ByteArray y otros objetos AS3 directamente a PHP, e insertarlos en MySQL, puedes ver mi proyecto y AMFPHP
todas las imágenes transparentes PNG son generadas por Flash, y se envían a AMFPHP, luego PHP genera el archivo PNG en el servidor.