2009-02-28 14 views

Odpowiedz

5

to trochę trudne: Można to zrobić na dwa sposoby:

Arthem pisał to w innym wątku:

To było bardzo pomocne dla mnie: http://www.quietless.com/kitchen/upload-bitmapdata-snapshot-to-server-in-as3/

You należy zmodyfikować URLRequestWrapper, aby wstawić nazwy pól i nazw plików, w razie potrzeby. Oto, co zrobiłem:

bytes = 'Spis treści: formularz danych; name = "'+ $ fieldName +'"; filename = "";

Robi najbardziej formatowanie nagłówków więc serwer mógł zrozumieć to jako wysyłania plików

Przy okazji, jeśli masz BitmapData może trzeba go zakodować. JPEG lub PNG pierwszej

I zazwyczaj korzystać z tego rozwiązania.

nie używałem API ImageShack, ale może chcesz spróbować przy użyciu ADO be's JPGEncoder class - oto krótki przykład, który przekazuje nazwę użytkownika i tablicę bajtów JPG, to naprawdę proste.

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

Należy pamiętać, że zmienne są przekazywane jako część ciągu zapytania. Nie można używać zmiennych URLV, jak zasugerowało kilka osób, ponieważ właściwości URLVariables będą przechowywane we właściwości danych żądania, z których już korzystamy do przekazania obiektu byteArray.

0

Możesz użyć HTTPService do wysłania danych. Here's wprowadzenie do samouczka.

+0

Dzięki! ... Nigdy wcześniej nie używałem Flex. Spróbuję. –

0

Jeśli nie używasz flex, spróbuj URLLoader & & Zapytanie o URL, aby przekazać dane jako zmienną POST.

+0

Już to robię. Problem polega na tym, że chcę zamieścić kilka danych formularza obok. –

2

Chciałem wysłać zaszyfrowany kod autoryzacji z Flash do PHP wraz z obrazkiem JPG. Nie nadaje się do umieszczania tego w zmiennych pobierania, więc obejrzałem go w ten sposób. Większość kodu to faktyczne gromadzenie migawki na scenie, ale tylko jej określony region. Częścią, która jest tutaj istotna, jest użycie writeMultiByte do zaszyfrowania zaszyfrowanego hasła na końcu informacji o obrazie jpb. Następnie wysyłam długość tego hasła przy użyciu ciągu url zmiennych get, tak aby PHP wiedział, że pokazuje dużo, aby odciąć koniec.

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 odbiorcza:

$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

Można użyć AMFPHP lub Zend AMF, właśnie zakończył projekt tak, mój produkt umożliwić użytkownikowi zmienić kolorystykę produktu, a następnie Wyjście ByteArray dane i inne obiekty AS3 bezpośrednio do PHP i wstawić do MySQL, możesz see my project i AMFPHP wszystkie przezroczyste obrazy PNG są generowane przez Flash i wysyłać do AMFPHP, PHP następnie wygenerować plik PNG na serwerze.