2009-02-28 17 views

risposta

5

è un po 'difficile: Si può fare in due modi:

arthem postato in un altro thread:

Questo è stato di grande aiuto per me: http://www.quietless.com/kitchen/upload-bitmapdata-snapshot-to-server-in-as3/

È è necessario modificare lo strumento URLRequestWrapper per inserire i nomi e i nomi dei campi laddove necessario. Ecco cosa ho fatto:

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

Non la maggior parte della formattazione di intestazioni modo che il server riusciva a capire come caricare file di

A proposito, se avete una BitmapData potrebbe essere necessario codificarlo. in JPEG o PNG primo

e io di solito uso questa soluzione:.

non ho usato l'API ImageShack, ma si consiglia di provare a utilizzare ADO la classe JPGEncoder di be - ecco un rapido esempio che passa un nome utente e l'array di byte di JPG, è davvero piuttosto semplice.

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

Si noti che le variabili vengono passate come parte della stringa di query. Non è possibile utilizzare URLVariables, come suggerito da più persone, poiché gli URLVariabili verrebbero archiviati nella proprietà dei dati della richiesta, che stiamo già utilizzando per passare il byteArray.

0

È possibile utilizzare un HTTPService per inviare dati. Here's una introduzione di tipo tutorial.

+0

Grazie! ... Non ho mai usato Flex prima. Cercherò. –

0

Se non si utilizza il flex, provare URLLoader & & URLrequest, per passare i dati come variabile POST.

+0

Lo faccio già. Il problema è: voglio inserire alcuni dati del modulo a fianco. –

2

Desidero inviare un codice di autorizzazione crittografato da Flash a PHP insieme a un'immagine JPG. Non era adatto per postare questo nelle variabili get e così l'ho aggirato in questo modo. La maggior parte del codice è la raccolta effettiva di un'istantanea della fase, ma solo una regione specifica di essa. La parte che è rilevante qui è l'uso di writeMultiByte per virare sulla password crittografata alla fine delle informazioni sull'immagine jpb. Quindi invio la lunghezza di questa password usando la stringa di url di get variables in modo che PHP sappia mostrare molto per tagliare la fine.

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

Il ricevente 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); 
0

È possibile utilizzare AMFPHP o Zend AMF, ho appena finito un progetto come questo, il mio prodotto permette all'utente di cambiare uno schema di colori del prodotto e quindi l'uscita del ByteArray dati e altri oggetti AS3 direttamente in PHP, e inserirli in MySQL, è possibile see my project e AMFPHP

tutte le immagini PNG trasparenti sono generate da Flash e inviate ad AMFPHP, quindi generano il file PNG sul server.

Problemi correlati