Tilanne:
Haluan siirtää kännykästä kuvan palvelimelle Flickerin tapaan. Kaikki toimii muuten mallikkaasti, mutta en saa luotua kuvaa oikein palvelimella. PHP:llä otan kuvan vastaan $_FILES muuttujasta ja clientista lähetän datan tähän tyyliin: http://www.flickr.com/services/api/upload.
Ongelma on seuraavanlainen:
1) Muutan clientissa kuvan biteiksi ja lähetän sen.
2) Palvelin ottaa tiedoston vastaan sellaisenaan -> tiedoston koko kasvaa eikä kuva enää aukea.
Mitä tarkoitat kuvan muuttamisella biteiksi? Kuvan dataahan ei tarvitse käsitellä millään tavoin, vaan sen voi lähettää sellaisenaan. Kuinka paljon tiedoston koko kasvaa? Oletko tarkastellut heksaeditorilla mitä muutoksia tiedostoon on tapahtunut?
Ah ok, elikkä käytössä on Javalla tehty clientti.
Javassa post parametrit pitää lähettää bitteinä. (Toivottavasti ei mene tavut ja bitit sekaisin)
Esimerkki: alkuperäisen kuvan koko on vaikka 16.3KB ja kun lähetän sen bitteinä, niin bittimassan koko on 20KB. Palvelimella otan tiedoston vastaan jolloin sen koko on 20KB. Kun se sitten tallennetaan palvelimelle, niin sen koko on 20KB mutta "size on disk" arvo (eli koko bitteinä) on 25KB.
Eli en saa "käännettyä" kuvaa takaisin alkuperäiseen formaattiin.
Bitti (bit) on 1 tai 0. Tavu (byte) on yleensä kotivehkeillä 8 bittiä pitkä ja siten lukuna väliltä 0-255. Tavuista siis luultavasti yrität koko ajan puhua.
Luo kuvatiedoston sijaan testausta varten vaikkapa jo mainitulla heksaeditorilla tiedosto, jossa on tavut 0-255 eli kaikki vaihtoehdot. Lähetä tämä tiedosto ja tutki heksaeditorilla, millaisen tiedoston palvelin sai aikaan. Eroista voit päätellä, mikä menee pieleen.
Koko levyllä (size on disk) on aivan eri asia, siitä ei tarvitse tuossa välittää. Se vain kertoo, paljonko käyttöjärjestelmä on levyltä joutunut varaamaan tilaa; arvo pyöristyy yleensä jonkin verran ylöspäin, joska tilaa jaetaan esimerkiksi 4096 tavun palasina, jolloin esimerkiksi 10 tavun ja 4000 tavun tiedostot käyttävät molemmat kokonaisen palan ja 4100 tavun tiedosto jo kaksi palaa.
Miten yrität lukea kuvaa palvelimelta? Tallentuuko tiedostoon kuvadatan headereita ollenkaan vai pelkästään esimerkiksi kuvan sisältö niin, ettei ohjelma vain tiedä, mitä formaattia kuva on, eikä siksi osaa avata sitä?
Oletko kokeillut avata tiedostoa heksa (tai teksti)-editorissa? Jos kuvan alussa tai lopussa on neljän kilotavun pätkä ylimääräistä dataa, sen luulisi löytyvän tällä tavalla. Jos näin ei ole, voit ainakin sulkea tämän vaihtoehdon pois.
Tuo mainittu size on disk on aivan eri asia kuin tiedoston oikea koko. Metabolix selitti jo, että kiintolevyltä varataan tilaa tietyissä blokeissa. Tuskin siihen mitään ylimääräistä dataa on neljää kiloa tullut. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.