Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: jQueryllä xml tiedoston teko ja postaus

Synomi [07.11.2011 13:40:53]

#

Olisi tarkoitus jQueryllä saada tehtyä lennosta xml "tiedosto". Tiedostoon data otettaisiin localStoragesta. Kun "tiedosto" on saatu täytettyä Xml:nä, niin olisi tarkoitus postata se tiettyyn urliin jossa asp.net palvelin sen ottaa vastaan ja tallentaa tiedostona.

Heti voi tulla mieleen että stringi muodossa lähettäminen voisi olla järkevämpää, mutta jos tuon "tiedoston" voi toteuttaa suhkot helposti, niin sitä tässä mielummin käyttäisi.

Käytössä on vain javascripti.

Jos normi formia käyttää missä valittee xml -tiedoston niin se menee perille formilla:

<form action="http://urli/Upload" method="post" enctype="multipart/form-data">
<input type="file" id="file" value="" name="file"/>
<input type="submit" value="Lähetä" />
</form>

Eli sen sijaan että tiedosto valittaisiin koneelta, se pitäisi luoda javascriptillä ja käyttää samantyylistä lähetystä ajaxilla. Niin oiskohan jollain tietämystä miten nuo jQueryn ajax/post toiminnot toimii tarkemmin. Ei suoraa esimerkkejä meinaa löytyä.

Edit: Sama homma pitäisi viellä saada toteutettua kuville. Eli canvaksesta/img elementistä kuva localStorageen ja localStoragesta ajaxilla asp.net palveluun eri domainissa. Xml:n vois vaihtoehtosesti ottaa palvelimella vastaan stringinäkin, kuva onkin sitten vähän eri asia.

Metabolix [07.11.2011 15:14:21]

#

Tietääkseni tiedostokenttää ei voi täyttää JS:llä eikä tiedostoja voi lähettää AJAXilla. Suosittelen tavallista POST-dataa.

Kuvan ei pitäisi olla mikään ongelma, canvas-elementin sisällön saa RGBA-muotoisena taulukkona (context.getImageData), jonka voi sitten vaikka Base64-enkoodata lähetystä varten. (URL-enkoodaus on toki vielä yksinkertaisempi mutta tuottanee paljon isomman lopputuloksen.)

Synomi [07.11.2011 15:40:14]

#

Niin tai sinänsä tiedosto kenttää ei ole tarkoitus käyttää, laitoin vaan esimerkkinä sen siltä kannalta, että millaisena palvelimen pitäisi tämä xml jquery post tunnistaa kun se palvelimelle postataan. Eli samalta kuin normaali tiedosto kentän postaus. Eli xml tiedoston content type pitäis olla text/xml ja kuville image/jpeg.

Mutta jos imagenkin saa sitten stringinä suoraa lähetettyä, niin kai se on sitten helpompi tapa lähettää kummatkin stringeinä content typen kans ja serverillä muodostaa niistä erikseen tiedostot.

The Alchemist [08.11.2011 23:21:34]

#

Missä se oma-aloitteisuus taas kerran on?

Esimerkit: http://api.jquery.com/jQuery.post/

Jos on epäselvää, miten data näkyy palvelimelle, niin laitat print_r($_REQUEST) ja katsot tulostetta. Kuten Metabolix jo sanoikin, niin jQueryllä et voi tiedostoja lähettää. Tieto kulkee ihan tavallisissa GET- ja POST-queryissä.

Tallennat datan sitten itse tiedostoon palvelimen päässä.

Synomi [09.11.2011 22:23:27]

#

Tarkemmin tarkotus oli siis saada esimerkiksi:
var xmldata = "<root><kentta1>tekstia</kentta1></root>";

lähetettyä palvelimelle joka tunnistaa että kyseeessä on xml tiedosto ja tallentaa sen. (Voi myös olla kyseessä joku muu tiedosto tyyppi, palvelimen pitäisi vaan nähdä että tiedosto tulossa ja tallentaa se). Tämän siis pitää tapahtua javascriptissä ajaxilla.

Tota jquery postia tutkinki, samanhan tekee pelkkä ajax functiokin. Ongelmana oli saada content typeks text/xml ja se että palvelin tunnistaa sen tiedostona. Palvelimena on asp.netin palvelin, jossa on mvc 3 käytössä ja johon en kovin hyvin tutustunu ole viellä(projektina opinnäytetyö). Siinä tiedosto otetaan vastaan httpPostedFilesillä. Kai jos tohon ite lisäisi headerit jotenkin ja content typen niin palvelin tunnistaisi sen tiedostona. Tähän nyt täällä kysyinkin apua miten se onnistuisi, koska en siihen esimerkkejä löytänyt jotka toimisi.


Ongelman ohitin sillä että tein tiedon siirron JSON muodossa, jossa lähetetään myös tyyppi muuttuja, jolla sitten määräytyy lähetettävän stringin tyyppi(samassa kumminki username ja md5hash salasanakin). Xml -tiedon encodes tolla base64llä joka on canvaksesta otetuissa kuvissakin automaattisesti. (Tai ainakin vastaanottaessa JSON dataa palvelimella kuvien data on base64 enkoodattu)

Alunperin oli vaan tarkoitus testata, että Xml -tiedon lähetys onnistuu iPadiltä Phonegapistä postaamalla javascriptillä, joten olisi ollut riiittävä että palvelin vain tallentaa kaikki tiedostot jota sille lähetetään. Niin ei ollut järkevää kuluttaa montaa tuntia aikaa opiskeleen ajax postia tarkemmin, että saisi pienen testin suoritettua. Mutta koska hommaan ei löytynyt ratkaisua, niin sama oli käyttää siihen pari päivää ja tehdä se kunnolla ja testata sitten. Että siinä vastaus tähän oma-aloitteisuus kysymykseen.

tsuriga [10.11.2011 01:48:14]

#

JSON-kikka on varmaan ihan riittävä ja paljon helpompi ellei aivan välttämättä tarvita suurta määrää binääridataa. MDN:n Using files from web applications -artikkelin lopusta löytyy koodi tekstimuotoiseen multipart-uploadiin Ajaxilla. Binääri- ja ASCII-merkkijonojen yhdistäminen ei footlen "Binary multipart POSTs in Javascript" -artikkelin mukaan luonnistu (päiväys tosin vuodelta 2007), mikä on, kuten artikkelissa sanotaan, huomattavasti hankaloittava tekijä multipart-datan lähettämisessä. Postauksesta löytyy ongelmaan koodirykäisy, joka toiminee vain Mozillan selaimissa.

Vastaus

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

Tietoa sivustosta