Moi
Käyttäjä lähettää kuvan, ja ohjelman pitäisi saada tietoon kuvan koko (korkeus, leveys) ennen kuin se tallennetaan serverille. Onko tähän jotain ratkaisua, vai teenkö sen siten, että tallennan sen, tarkistan koon ja jos se ei ole tarpeeksi pieni, niin poistan?
Oletan, että puhut tavallisesta PHP-sivusta. Juuri noin se on silloin käytännössä pakko tehdä, koska PHP-skripti ajetaan vasta lähetyksen jälkeen. PHP:n asetuksista voi lisäksi rajoittaa tiedoston maksimikokoa tavuina.
Käyttäjän puolella tarkistuksen tekeminen vaatisi esim. Flashilla tai Javalla toteutettua "lomaketta", ja tästä on luonnollisesti lisää vaivaa tekijälle ja harmia käyttäjille, joilla ei ole tarvittavia laajennoksia selaimessaan.
Periaatteessa olisi tietty fiksua että käyttäjän selain tarkistaisi jo ennen lähetystä. Jossain olen tuollaisen nähnytkin flashilla tehtävänä, mutta IMO hieman overkill. Javascriptillä ei taida pystyä selvittämään lomakkeen tiedostokenttään valitun kuvan pikselikokoa.
Tällainen näytti toimivan omalla koneellani. Pitää vaan jotenkin kopioida tuo file-kentän osoite tuon funktion parametriksi.
<html> <head> <title>js kuvia</title> <script type="text/javascript"> function kuvan_koko(kuva) { var uusi_kuva= new Image(); uusi_kuva.src = kuva; alert (uusi_kuva.width); } </script> </head> <body> <a href="javascript:kuvan_koko('U:/DCIM/100CASIO/CIMG0115.JPG')">Paina</a> </body> </html>
HUOM! Alkuperäinen koodi on otettu Täältä
EDIT: Eikä tietenkään ole missään määrin toimiva suojaus / vastaava menetelmä.
Kuvan koko kannattaa tarkistaa myös PHP-skriptissä, koska jos käyttäjä ottaa JavaScript-tuen pois päältä, eikä kokoa tarkisteta PHP-skriptissä käyttäjä voi upata vaikka gigatavun kokoisen kuvan palvelimelle, jos vain tilaa riittää.
pake10 kirjoitti:
käyttäjä voi upata vaikka gigatavun kokoisen kuvan palvelimelle, jos vain tilaa riittää.
Noh ei nyt sentään, mutta php.ini tiedostossa asetetun maksikoon kylläkin, joka taitaa olla pienempi kuin 1 Gigatavu :) Ja mainitsin asiasta kyllä viestini lopussa, että ei ole missään määrin luotettava menetelmä.
Ei ollut tarkoitus tarkistaa kuvan koka esim. megoissa, vaan kuvan leveys ja korkeus. Tein sen niin kuin ensimmäisessä viestissä mainitsin, lataan kuvan ensin palvelimelle, tarkistan koon ja poistan ylisuuren kuvan tapauksessa.
Joo, toki tuo javascript-kommenttini olikin tarkoitettu lähinnä käytettävyyttä ajatellen. Kaikille ei välttämättä ole selvää että mitä tarkoittaa vaikka 800x600 ja sitten on vähän ärsyttävää hitaalla yhteydellä parin minuutin odottelun jälkeen saada ilmoitus, että "kuva on liian suuri" kun on yrittänyt laittaa 10 megan kuvaa suoraan digikamerasta :D Tietenkään se ei poista tarvetta tarkastaa myös palvelimelle (kuten tässä on mainittukin)
Tuo javascript-viritys ei toimi jos sivu on netissä ja kuva omalla koneella.
Jos tuossa laittaa käyttäjälle tarkoitetun viestin, niin se kannattaa tehdä vasta TOSI suurista kuvista, yli 10 megatavua :D
Nimittäin kun sen kuvan voi pienentää sopivaksi, sellaiseksi mikä sivulla halutaan näyttää.
Aihe on jo aika vanha, joten et voi enää vastata siihen.