EDIT: Jos joku vois päivittää otsikon. Ei oo kyse enää javascriptistä vaan actionscript.
Olepa hyvä ~Naapurin ystävällinen moderaattori
Moi,
Alla on kohdat koodeista, joita käytän kuvan lataukseen palvelimelle.
Haluaisin että tämä upload-funktio lähettäisi myös numeron, jota php-tiedosto voisi käsitellä.
Miten se onnistuisi? En keksinyt hakusanoja googleen.
Varmaa tosi simppeli juttu kuitenkin.
//ACTIONSCRIPT public function upload(url, numero) { //url="uploader.php" var head:URLRequestHeader = new URLRequestHeader("Accept","text/*"); var req:URLRequest = new URLRequest( url ); req.requestHeaders.push(head); req.data = ba; req.method = URLRequestMethod.POST; req.contentType = "image/jpeg"; var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, onLoaded); trace("sending post to: " + url); try { loader.load(req); } catch (error:Error) { trace("Unable to load requested document."); ExternalInterface.call('webcam.flash_notify', "error", "Unable to post data: " + error); } }
//UPLOADER.PHP //$numero=$_POST['num']; //echo $numero; $filename = 'pics/seppo.jpg'; $result = file_put_contents( $filename, file_get_contents('php://input') ); if (!$result) { print "ERROR: Failed to write data to $filename, check permissions\n"; exit(); } $url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']) . '/' . $filename; print "$url\n";
Mod. korjasi oikeat kooditagit
Jotain tälläistä?
var urlVars:URLVariables = new URLVariables(); urlVars.num = numero;
Mutta miten lähetän tuon tiedon samaan aikaan kuin jpg-tiedoston eli "ba"?
Moikka JussiR
meniskö näin...?
public function upload(url, numero) { //... var strData:String = StringUtil.trim(numero); var urlVars:URLVariables = new URLVariables(strData); req.data = urlVars; // }
Kai se menee, jos lähettää pelkän numeron tiedon? Mutta pitäis lähettää tuo kuva samalla. "ba" on kuva.
Tässä kohta koodista jossa ba asetetaan.
var ba:ByteArray; encoder = new JPGEncoder( jpeg_quality ); ba = encoder.encode( bmpdata );
Moikka taas JussiR!
var urlVars:URLVariables = new URLVariables("etunimi=Jussi&sukunimi=R*");
Kiitos lyhyemmästä koodista, Nea.
Mitä asetan req.data:n arvoksi, kun haluaisin, että lähetetään myös kuva?
Alkuperäisessä koodissa lähetetään pelkästään kuva, mutta tarvitsen numero-tiedon, että php-tiedosto voisi käsitellä kuvaa sen perusteella.
Moikka taas JussiR!
Mistäs ******a minä sen tiedän? Lätki sinne headereihin jotain lisähilpaketta...?
Jep, sitä mietinkin, mutta en oikein keksi hakusanoja.. Tai keksin, mutta mitään ei löydy.
Pitäisi varmaan tehdä koko lataus palvelimelle eri tavalla?
Yritin jotain tälläistä, mutta en saanut ainakaan vielä toimimaan. Olenko kuitenkin oikeilla jäljillä?
var urlVars:URLVariables = new URLVariables(); urlVars.id = id; var urlRequest:URLRequest = new URLRequest(url); urlRequest.method = URLRequestMethod.POST; urlRequest.data = urlVars; ba.upload(urlRequest); //tässä virhe
Hienoa, nea.
En pääse testaamaan just nyt, mutta manuaaleja selattuani voisin arvailla seuraavaa
var urlVars:URLVariables = new URLVariables(); urlVars.id = id; urlVars.ba = ba; var urlRequest:URLRequest = new URLRequest(url); urlRequest.method = URLRequestMethod.POST; urlRequest.data = urlVars; var fr:FileReference = new FileReference(); fr.upload(urlRequest);
Joo tuollaista löysin itsekin äsken. Mietin vaan miten tuollainen data sitten asetetaan tuohon (en löytänyt manuaaleista ainakaan vielä).
var ba:ByteArray; encoder = new JPGEncoder( jpeg_quality ); ba = encoder.encode( bmpdata ); var urlVars:URLVariables = new URLVariables(); urlVars.id = id; urlVars.ba = ba; var urlRequest:URLRequest = new URLRequest(url); urlRequest.method = URLRequestMethod.POST; urlRequest.data = urlVars; var fr:FileReference = new FileReference(); //tähän väliin jotain? fr.upload(urlRequest);
Ja mites se content-type?
Moikka taas JussiR!
mitähän jos...ompi näet niin, että variantti-taulukon alkioiksi voi lätkiä tavu-taulukoita
var strData:String = StringUtil.trim(numero); var bytes:ByteArray = new ByteArray(); bytes.writeUTFBytes(strData); var ba:Array = new Array(); ba[0] = encoder.encode(bmpdata); ba[1] = bytes;
Eikö urlVarsin sisältämä ba
välity uploader.php:lle ihan tuolla koodilla? URLRequest.datan esimerkissä puupataan URLRequestin
dataksi useamman arvon sisältämä URLVariables
.
lainaus:
If the object is a URLVariables object and the method is POST, the variables are encoded using x-www-form-urlencoded format and the resulting string is used as POST data. An exception is a call to FileReference.upload(), in which the variables are sent as separate fields in a multipart/form-data post.
(Kooditagiohjeissa eio actionscriptiä)
Ohoh joo. En tuohon aikaan enää huomannut että tuossa luki tuo ba tuossa kohdassa...
Testailen illalla.
PS: AS kooditagi: [koodiactionscript]
Tsurigan tavalla tuli "Error on calling method NPObject". 3 tuntia googletin kunnes tajusin, ettei vika ole javascriptissä vaan actionscriptissä.
Nea: Kokeilin sun tavalla. Tai aika monella tavalla.. Alla oleva antoi parhaan tuloksen: uploader.php:n "file_get_contents('php://input')" palauttaa: vals=%C3%BF%C3%98%C3%BF%C3%A0&vals=66
66 on se numero jota lähetän. PHP koodini sai sen siitä tällä: "$_POST['vals'];".
"%C3%BF%C3%98%C3%BF%C3%A0" on "ÿØÿà"... http://www.actionscript.org/forums/showthread.
Jostain syystä kuva ei lähde ollenkaan mukaan tai tuo koodi tekee sille jotain väärin..
encoder = new JPGEncoder( jpeg_quality ); var strData:String = StringUtil.trim(numero); var bytes:ByteArray = new ByteArray(); bytes.writeUTFBytes(strData); var ba:Array = new Array(); ba[0] = encoder.encode(bmpdata); ba[1] = bytes; trace("jpeg length: " + ba.length); var head:URLRequestHeader = new URLRequestHeader("Accept","text/*"); var req:URLRequest = new URLRequest( url ); req.requestHeaders.push(head); var urlVars:URLVariables = new URLVariables(); urlVars.vals=ba; req.data = urlVars; //? req.method = URLRequestMethod.POST; // Mitä tähän: // req.contentType = "image/jpeg"; trace("ID: " + numero + "sending post to: " + url); var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, onLoaded); try { loader.load(req); } catch (error:Error) { trace("Unable to load requested document."); ExternalInterface.call('webcam.flash_notify', "error", "Unable to post data: " + error); }
Käytin tätä StringUtilsia, koska Adobe Flash CS5:ssä ei ollut valmiina: http://www.gskinner.com/blog/archives/2007/04/
Mitenköhän saisin tähän nuo Base64-jutut..
EDIT: ei ****
Moikka taas JussiR!
var strData:String = StringUtil.trim(numero); var bs:ByteArray = new ByteArray(); bs = writeUTFBytes(strData); var ba:ByteArray = new Array(); ba = encoder.encode(bmpdata); var bMultiArray:Array = New Array(ba,bs);
& kokeile myös: req.ContentType = "application/octet-stream";
Tuolla content-typellä tulee Security Error: Error #2176
EDIT: lopetanpas nämä tälläiset koodailut hetkeksi ja kokeilen jos se toimis ihan vaan kun url perään lisää "?numero="+numero
EDIT: Tais olla ihan järkevä ratkaisu. Nimittäin nyt toimii ja php saa $_GET:llä numeron. Ei ****..
Aihe on jo aika vanha, joten et voi enää vastata siihen.