Avatar billede mekaniker Nybegynder
05. januar 2004 - 16:37 Der er 18 kommentarer og
1 løsning

Filtype, pixel og KB størrelse på *.gif og/eller *.jpg filer

Jeg er ved at lave noget upload af filer, med ASP upload.

Det drejer sig opm nogle store filer, som skal passe inden for nogle ting, så som pixel og KB størrelse.
Men ved aspupload skal filen uploades før at man kan tjekke disse ting.

Derfor tænkte jeg om man kunne validere filen med noget javascript inden uploadningen.

og hvis ja, hvordan man så finder pixelstørrelse og bytes-størrelse
Avatar billede koldstar Nybegynder
05. januar 2004 - 16:39 #1
Det kan du godt gøre i Javascript, men det kræver at dine brugere tilføjer din side til trusted sites og svarer ja til 117 sikkerhedsadvarsler...
Jeg har lavet et script der kan gøre det for et stykke tid siden... prøver lige at finde det...
Avatar billede mekaniker Nybegynder
05. januar 2004 - 16:42 #2
ok, det lyder spændende
Avatar billede thesurfer Nybegynder
05. januar 2004 - 16:49 #3
ved ikke om det der med trusted sites..
Men, du kan oploade filen med ASP, og checke KB og filtype..
Hvis KB og filtype er og, kan du skrive noget HTML/JavaScript kode, med et skjult <span>-tag der indeholder selve billedet.. Du kan så med JavaScript få fat på billedet størrelse i pixels..

Hvis det viser sig at billedet er "ugyldigt", kan du via ASP kode slette filen igen..

Jeg mener at billedet skal oploades, før JavaScript kan få fat på dimensionerne..
Avatar billede grunken Nybegynder
05. januar 2004 - 20:24 #4
omtrent sådan her burde da fungere i ie :-)

<script type="text/javascript">
var bil = new Image();

function check(filen){
  tmp = bil.src.split("\\");
  ext = tmp[tmp.length -1].split(".")
  ext = ext[ext.length-1]

  st = bil.fileSize;
  hj = bil.height;
  br = bil.width;

  str = "Filetype\t: ."+ext+"\n";
  str+= "Størrelse\t= "+st+"Bytes\n";
  str+= "Højde\t= "+hj+"px\n";
  str+= "Bredde\t= "+br+"px\n";
  alert(str)
}
</script>

<html>
<form>
<input name="fil" type="file" onchange="bil.src=this.value">
</form>
<a href="#" onclick="check();">check</a>

<img src="" id="elm" style="visibility:hidden;">
</html>
Avatar billede thesurfer Nybegynder
05. januar 2004 - 20:39 #5
grunken> Ikke dårligt :)
Men 2 ting:
1) Husk nu at få "return false" med: onclick="check();return false" :)
2) Kan du ikke lige lave den crossbrowser? :)
Avatar billede grunken Nybegynder
06. januar 2004 - 13:56 #6
thesurfer >
Det får vi knælme svært ved eftersom at ie er den eneste der understøtter fileSize :/

Jeg vil som du selv anbefaler osse bruge enten asp, eller php's indbyggede muligheder for at checke disse oplysninger :-)

Men skulle da lige lege lidt :-)

prøv den her :

<script type="text/javascript">
var bil = new Image();
var ie = (document.fileSize)?true:false
var str,elm

function check(filen){
  if(!ie){
  bil.src = document.forms[0].fil.value;
    elm = document.getElementById('elm');
    elm.onload = new Function("return skriv()");
    elm.src = "file:///"+bil.src.replace(/\\/g,"/");}
  else{
  return skriv();}
  }

function skriv(){
  tmp = bil.src.split("\\");
  ext = tmp[tmp.length -1].split(".")
  ext = ext[ext.length-1]

  if(ie){
  st = bil.fileSize
  hj = bil.height;
  br = bil.width;}
  else{
  hj = elm.offsetHeight;
  br = elm.offsetWidth;}

  str = "<b>FileInfo</b><br>"
  str+= "Filetype:  ."+ext+"<br>";
  str+= (ie)?"Størrelse = "+st+" Bytes<br>":""
  str+= "Højde = "+hj+"px<br>";
  str+= "Bredde = "+br+"px<br>";

  document.getElementById("info").innerHTML = str;
}
</script>

<html>
<form>
<input name="fil" type="file" onchange="if(ie)bil.src=this.value;">
</form>
<a href="#" onclick="check();return false">check</a><br>

<img src="" id="elm" style="visibility:hidden;z-index:0;position:absolute">
<div id="info" style="z-index:1;">&nbsp;</div>

Den understøtter da de fleste browsere :-), dog uden fileSize i dem alle :-), og eftersom jeg skriver de fleste, så er det fordi jeg lige lurede at opera ikke lige understøtter onload på et "img"-element (underligt nok)

Men man kan vel let tilføje en

if(window.opera){
while (elm.offsetHeight!=hj)
  hj = elm.offsetHeight                       
}

o.s.v .

p.s bemærk at return false er blevet tilføjet ;p
Avatar billede grunken Nybegynder
06. januar 2004 - 13:57 #7
upz, hvad laver det <html>-"tag" inde midt i det hele ? *G*
Avatar billede olebole Juniormester
06. januar 2004 - 21:21 #8
<ole>

Opera .... ak, ja - det norske svar på runestenen! Hvad fungerer der?
Hvad endnu værre er, den heller ikke understøtter onload-events på iframes. Da den heller ikke understøtter XMLhttp-requests, er man desværre nødt til at bruge en iframe, hvis man vil lave web-applikationer, der bare er _lidt_ begavede - eller kommunikere med web-services. Men det kan man altså ikke  :o|
Heller ikke document.stylesheets understøtter den. Det betyder, man heller ikke kan manipulere stylesheets på klienten.
Nå ... det er zq da godt krydset i øverste højre hjørne fungerer!  ;o)

Man kunne dog skrive billedet ind i et span med visibility:hidden (_ikke_ display:none). Lige inden det indskrives, måles span'ets bredde med ELEMENT.offsetWidth.
Derefter kan man med en setInterval() på f.eks. 1/10 sekund checke, hvornår bredden på span'et har ændret sig.
Når det sker, må billedet være på plads - og data kan aflæses. Husk at stoppe timeren med clearInterval(TIMERNAVN), så klienten ikke spilder unødige vitaminer  :)

Jeg sidder og bakse med noget andet, så jeg har ikke lige tid til at lave et eksempel - men er sikker på, det gode 'legebarn' grunken ikke kan lade være med at teste. Så kan han jo lægge resultatet her  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
06. januar 2004 - 21:25 #9
PS: Husk at positionere span'et absolut - og læg det i left:0px/top:0px. Ellers introduceres let en scrollbar eller to, da det jo fylder 'fysisk' med visibility:hidden. Med display:none fylder det ikke, men så vil man dog sikkert ikke kunne aflæse dimensionerne  :)
Avatar billede mekaniker Nybegynder
07. januar 2004 - 08:59 #10
Det lyder noget indviklet, og jeg kan desværre ikke rigtig bruge det, da det kommer til af foregå i Netscape.

men point skal i have.
Avatar billede mekaniker Nybegynder
07. januar 2004 - 09:00 #11
Jeg tror bare jeg bruger ASP, for det fungere da, i alle browsere.

Smid et svar, så i kan få lidt point.
Avatar billede thesurfer Nybegynder
07. januar 2004 - 13:56 #12
Et svar er smidt.. :)
Det er jo den sikreste løsning..
Avatar billede thesurfer Nybegynder
07. januar 2004 - 13:56 #13
doh! :)
Avatar billede grunken Nybegynder
08. januar 2004 - 12:35 #14
hehe olebole :D, nu har jeg faktisk rodet med ovenstående lidt tid, og hvor goe mine intentioner er!, så løb jeg ind i muren der hed at opera nægter at koporligt at hente billeder fra brugerens disk...sagt på en anden måde, den henter de der allerede ligger i browserens cache, men ellers ikke :/

sikkert en smart sikkerhedsforanstaltning, men jeg kan endnu engang ikke se det logiske i det

Så løsningen bliver desværre at sortere enkelte browsertyper fra, og sende en ekstra variabel med til oploadsscriptet, der fortæller om billedet er checket på forhånd eller ej :/, og så er man jo i bund og grund lige vidt!

Så jeg er meget på nippet til at gi dig ret i dine udtalelser om runestenene.. :D, opera mangler vist at optimere deres JS maskine en hel del :-) , i hvert tilfælde er mig og opera inkompatible ;D
Avatar billede mekaniker Nybegynder
11. januar 2004 - 20:04 #15
>> thesurfer

Du fik point'ne da der ikke var andre der lagde et svar.
Avatar billede thesurfer Nybegynder
11. januar 2004 - 20:17 #16
Jamen, takker for points.. og det er mest sikkert at bruge asp til det hele..
Avatar billede grunken Nybegynder
11. januar 2004 - 20:24 #17
;-)

det kan godt være at surfer har ret, men jeg vil dog samtidig sige at man på et site kunne sortere ret mange "fejl-uploads" fra ved at lave selv simple check på klienten :-)
Avatar billede thesurfer Nybegynder
11. januar 2004 - 20:47 #18
grunken> Det er rigtigt nok.. så hvis du vil ha' points for dit script, skal du bare sige til..
Avatar billede grunken Nybegynder
11. januar 2004 - 20:54 #19
Nej thesurfer du kom med det mest virksomme svar på denne problematik :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester