Nasıl I (Flash'tan) ByteArray ve bazı form verilerini php gönderebilir?

5 Cevap php

Ben burada bu gibi Flash AS3 yapılmış bir karalama defteri var: http://henryjones.us/articles/using-the-as3-jpeg-encoder

Ben php ile bir html form alanına gelen sunucu ve bazı verilere jpg göndermek istiyorum. Bir gönderme düğmesine bastığında görüntü dosyasını teslim Flash film zorlamak için bir yolu var mı?

5 Cevap

o biraz zor: Bunu iki yoldan birini yapabilirsiniz:

Arthem başka bir iş parçacığı bu yayınlanmıştır:

This was of great help to me: http://www.quietless.com/kitchen/upload-bitmapdata-snapshot-to-server-in-as3/

You need to modify the URLRequestWrapper to insert field names and file names where needed. Here's what I've done:

bytes = 'Content-Disposition: form-data; name="' + $fieldName + '"; filename="';

It does the most formatting of headers so the server could understand it as a file upload.

By the way, if you have a BitmapData you might need to encode it to JPEG or PNG first.

Ve ben genelde bu çözümü kullanabilirsiniz:

Ben imageshack API kullanmadıysanız, ama Adobe'nin JPGEncoder sınıfını kullanarak denemek isteyebilirsiniz - Burada bir kullanıcı adı ve JPG adlı bayt dizisi, gerçekten oldukça basit geçer hızlı bir örnek.

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);
}

Değişkenler sorgu dizesi bir parçası olarak geçirilen unutmayın. Birçok kişinin öne sürdüğü gibi URLVariables biz zaten ByteArray geçmek için kullandığınız isteğin data özelliğinde saklanır gibi, URLVariables kullanamazsınız.

Ben bir JPG görüntüsü ile birlikte PHP şifreli yetkilendirme kodu formunu Flaş göndermek istedi. Bu değişkenler olsun bu yazı için uygun değildi ve bu yüzden etrafında bu şekilde aldım. Kod çoğu bir sahne anlık gerçek toplanması, ancak bunun sadece belirli bir bölgedir. Burada alakalı kısmı JPB görüntü bilgi sonuna kadar şifreli parola tack writeMultiByte kullanılmasıdır. PHP sonu kesmek için çok göstereceğini biliyorum ki ben o get değişkenleri url dize kullanarak bu şifre uzunluğunu gönderir.

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

Alma 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);

Veri göndermek için bir HTTPService kullanabilirsiniz. Here's öğretici çeşit giriş.

Flex kullanarak değilseniz, URLLoader deneyin && URLRequest, bir POST değişken olarak veri aktarmak için.

Siz AMFPHP veya Zend AMF kullanabilirsiniz, ben sadece böyle bir proje size {[can, ürünüm bir kullanıcı bir ürünün renk düzenini değiştirmek ve daha sonra çıkış ByteArray veriler ve diğer AS3 nesnesi doğrudan PHP ve MySQL içine eklemek için izin, bitmiş (0)]} ve AMFPHP

Tüm PNG şeffaf görüntüleri Flash tarafından oluşturulan ve AMFPHP göndermek olan, PHP sonra sunucuda PNG dosyası oluşturmak.