Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: [ActionScript] parametri ja upload

Sivun loppuun

JussiR [29.11.2010 19:07:09]

#

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

JussiR [29.11.2010 20:12:12]

#

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"?

neau33 [29.11.2010 21:03:44]

#

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

JussiR [29.11.2010 21:12:48]

#

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

neau33 [29.11.2010 21:23:01]

#

Moikka taas JussiR!

   var urlVars:URLVariables = new URLVariables("etunimi=Jussi&sukunimi=R*");

JussiR [29.11.2010 21:28:28]

#

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.

neau33 [29.11.2010 21:31:31]

#

Moikka taas JussiR!

Mistäs ******a minä sen tiedän? Lätki sinne headereihin jotain lisähilpaketta...?

JussiR [29.11.2010 21:49:04]

#

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

tsuriga [29.11.2010 22:46:07]

#

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

JussiR [29.11.2010 23:05:26]

#

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?

neau33 [30.11.2010 00:04:09]

#

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;

tsuriga [30.11.2010 00:21:45]

#

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

JussiR [30.11.2010 13:56:00]

#

Ohoh joo. En tuohon aikaan enää huomannut että tuossa luki tuo ba tuossa kohdassa...

Testailen illalla.

PS: AS kooditagi: [koodiactionscript]

JussiR [30.11.2010 17:42:39]

#

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.php3?t=225040

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/free_extension.html

Mitenköhän saisin tähän nuo Base64-jutut..

EDIT: ei ****

neau33 [30.11.2010 20:05:35]

#

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

JussiR [30.11.2010 20:43:37]

#

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 ****..


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta