Toon posts:

[ASP]Upload image format en size

Pagina: 1
Acties:
  • 167 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben niet zo bekend met uploaden in ASP.
Ik heb in iedergeval een werkende code gemaakt, die dus files naar een dir op de server kan uploaden.

Mijn vraag is, hoe kan ik er voor zorgen dat de files die worden geupload alleen jpeg of gif is en tot 50kbyte?

Hier mijn code tot nu toe:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<%
  Dim Form: Set Form = Server.CreateObject("ScriptUtils.ASPForm")
  If Form.State = 0 Then
    Form.Files.Save "d:\sites\domeinnaam\upload\"
  Else 
    'Handle other form states.
  End If
%>

<Body>
<form method=post ENCTYPE="multipart/form-data">

<input type="submit" value="Upload the files >>"><br>
<Div ID=files>
 File 1 : <input type="file" name="File1"><br>

</Div>
<Input Type=Button Value="+Add a file" OnClick=Expand()>
<Script>
  var nfiles = 2;
  Function Expand(){
    nfiles++;
    files.insertAdjacentHTML('BeforeEnd','<BR> File '+nfiles+' : <input type="file" name="File'+nfiles+'">');
  }
</Script>


Ik heb overigens een trial object gedownload. Weet iemand misschien een goede gratis uploader?

Bij nader inzien is mijn script zwaar bagger, heb er eigenlijk geen ruk aan.

Wat ik wil is een image uploaden, die image moet gerenamed worden, en die gerenamede filename wil ik een sql database opslaan. Ik zoek me de tering, maar ik vind niks wat mij helpt.

[ Voor 63% gewijzigd door Verwijderd op 19-12-2003 04:43 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
ASP101 heeft een volledig VBScript, open source uploader. Het voordeel is dat je geen objecten op de webserver hoeft te registreren.

Als je even zoekt op 'pure script uploader' moet je het wel kunnen vinden. Je kunt hierbij controleren op extensie/grootte en rechtstreeks naar een database schrijven.

Trouwens, veel hosts hebben een aantal objecten -zoals een uploader- standaard geinstalleerd. Je zou nog even kunnen informeren bij je host.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Is ASP.Net ook een optie om te gebruiken voor dit gedeelte? Deze heeft namelijk al een redelijke uploader in zich. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
lijkt me dat scriptutils zelf ook wel het een en ander kan controleren (extensie / filesize), daarnaast zou je de extensie al clientside kunnen controleren...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

FvKnijff schreef op 19 december 2003 @ 10:56:
lijkt me dat scriptutils zelf ook wel het een en ander kan controleren (extensie / filesize), daarnaast zou je de extensie al clientside kunnen controleren...
File extensions vind ik vrij onbetrouwbaar; ik heb wdb een voorkeur om met contenttype te werken.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
FvKnijff schreef op 19 december 2003 @ 10:56:
lijkt me dat scriptutils zelf ook wel het een en ander kan controleren (extensie / filesize), daarnaast zou je de extensie al clientside kunnen controleren...
clientside zou dan met een applet of downloadable activeX object moeten. De server weet immers niet welke extensie een bestand op de client heeft.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

P_de_B schreef op 19 december 2003 @ 11:32:
[...]


clientside zou dan met een applet of downloadable activeX object moeten. De server weet immers niet welke extensie een bestand op de client heeft.
Het eerste wat je kan doen zodra je naar de server wilt, is kijken welke extensie de file heeft.. dus dat zou geen probleem zijn.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Jaspertje schreef op 19 december 2003 @ 11:39:
[...]

Het eerste wat je kan doen zodra je naar de server wilt, is kijken welke extensie de file heeft.. dus dat zou geen probleem zijn.
Maar dan moet het bestand al wel geupload zijn, je kijkt dus aan de server kant.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
P_de_B schreef op 19 december 2003 @ 11:40:
[...]


Maar dan moet het bestand al wel geupload zijn, je kijkt dus aan de server kant.
neehoor, je kan gewoon met javascript de inhoud van het file-veld opvragen en aan de hand daarvan de extensie uitlezen...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

FvKnijff schreef op 19 december 2003 @ 12:34:
[...]


neehoor, je kan gewoon met javascript de inhoud van het file-veld opvragen en aan de hand daarvan de extensie uitlezen...
Dan is nu de vraag; vertrouw je een extensie? Persoonlijk vertrouw ik nooit userinput.

Om het alleen hierop te baseren; kan je net zo goed een waarschuwing geven in de html dat alleen bepaalde extensie's worden geaccepteerd.

[ Voor 6% gewijzigd door gorgi_19 op 19-12-2003 12:38 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
FvKnijff schreef op 19 december 2003 @ 12:34:
[...]

neehoor, je kan gewoon met javascript de inhoud van het file-veld opvragen en aan de hand daarvan de extensie uitlezen...
en hoe komt die javascript variabele dan op de server?

Ok, je zou een Javascript alert kunnen laten zien, maar dat is in mijn ogen een slechte beveiliging.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

P_de_B schreef op 19 december 2003 @ 12:38:
[...]

en hoe komt die javascript variabele dan op de server?
In een
HTML:
1
<input type="hidden" value="valuediemetJavascriptGezetWordt">

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
gorgi_19 schreef op 19 december 2003 @ 12:39:
[...]

In een
HTML:
1
<input type="hidden" value="valuediemetJavascriptGezetWordt">
Ja, en om dat op de server te krijgen moet je het form submitten, (en dus het document uploaden) dus kun je net zo goed Form.FileField.Value op de server checken, toch?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • xtra
  • Registratie: November 2001
  • Laatst online: 19-11-2025
gorgi_19 schreef op 19 december 2003 @ 10:57:
[...]

File extensions vind ik vrij onbetrouwbaar; ik heb wdb een voorkeur om met contenttype te werken.
Is het in Windows niet zo dat het contenttype wordt afgeleid van de extensie? Je hack.asp hernoemen naar hack.gif geeft automatisch image/gif als contenttype.

Het contenttype is volgens mij dus ook niet betrouwbaar. Pas als je het bestand analyseert ben je zeker over het contenttype. Wellicht kun je het bestand laten inlezen door een image-object. Die geeft hoogstwaarschijnlijk een foutmelding als je een niet-gif/jpg bestand inlaadt.

Je kunt op je formulier natuurlijk wel de extensies beperken als eerste filter.

<input type="file"... heeft overigens ook het accept-attribuut waarmee je het soort bestand kunt filteren: http://www.w3.org/TR/html4/interact/forms.html#adef-accept

[ Voor 11% gewijzigd door xtra op 19-12-2003 12:58 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Dat laatste betwijfel ik. Net even getest, weliswaar met ASP.Net, maar voor het idee.

Een bestand hernoemd naar van test.jpg naar test.gif. Vervolgens test.gif geupload en gekeken wat het contenttype is. Hij geeft hier netjes weer dat het een jpeg bestand is, ondanks de gif extensie.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • xtra
  • Registratie: November 2001
  • Laatst online: 19-11-2025
gorgi_19 schreef op 19 december 2003 @ 12:57:
Dat laatste betwijfel ik. Net even getest, weliswaar met ASP.Net, maar voor het idee.

Een bestand hernoemd naar van test.jpg naar test.gif. Vervolgens test.gif geupload en gekeken wat het contenttype is. Hij geeft hier netjes weer dat het een jpeg bestand is, ondanks de gif extensie.
Je twijfel is terecht, al weet ik nog niet helemaal hoe het werkt :)

Van test.gif naar test.doc geeft image/gif, maar van test.js naar test.doc geeft application/msword.

Blijft de vraag waar het contenttype wordt bepaald. Als dat aan de kant van de client is, is het natuurlijk nog steeds mogelijk zelf het contenttype te bepalen en mogelijk gevaarlijk.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Om het nog wat complexer te maken.....

default2.htm --> default2.doc

En als contenttype werd weergegeven.... een html-bestand en geen MS word bestand :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
FvKnijff schreef op 19 december 2003 @ 10:56:
lijkt me dat scriptutils zelf ook wel het een en ander kan controleren (extensie / filesize), daarnaast zou je de extensie al clientside kunnen controleren...
Dat component is geen freeware, zit nu met een trial versie van scriptutil van 30 dagen oid.

Verwijderd

Topicstarter
P_de_B schreef op 19 december 2003 @ 08:19:
ASP101 heeft een volledig VBScript, open source uploader. Het voordeel is dat je geen objecten op de webserver hoeft te registreren.

Als je even zoekt op 'pure script uploader' moet je het wel kunnen vinden. Je kunt hierbij controleren op extensie/grootte en rechtstreeks naar een database schrijven.

Trouwens, veel hosts hebben een aantal objecten -zoals een uploader- standaard geinstalleerd. Je zou nog even kunnen informeren bij je host.
Thanks ik ga deze even proberen. Ik ben trouwens mijn eigen provider :). Ik beheer de server, dus als ik een component wil hebben dan moet ik ze zelf kopen.

Verwijderd

Topicstarter
Werkt perfect thanks.

Nog ff 1 vraagje. Ik kan nu kiezen uit binair opslaan in de database of to disk. Wat is het verschil?

Oftewel wat is beter? Qua performance that is.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 24 december 2003 @ 01:26:
Werkt perfect thanks.

Nog ff 1 vraagje. Ik kan nu kiezen uit binair opslaan in de database of to disk. Wat is het verschil?

Oftewel wat is beter? Qua performance that is.
Is niet te zeggen met deze info.

Gebruik je een soort van caching, wordt het een direct link, welke database, staat het bestand buiten, of binnen de webroot, grootte van het bestand, etc.

Als je het echt voor jouw situatie wilt weten, dan zul je een performancetest moeten doen.

[ Voor 64% gewijzigd door gorgi_19 op 24-12-2003 01:48 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
edit
verkeerde topic.

ontopic:

Ik bedoel eigenlijk in het algemeen.

Ik gebruik sql server 7
Verder niks speciaal ingesteld in de IIS.

De files staan bij save to hd buiten de wwwroot.
Ik wil een limit van ongeveer 200kb gaan invoeren op de files.

maar het zou wel eens kunnen gebeuren dat er 10.000-en files (images dus) worden geupload. Is dat wel verstandig in een database?

[ Voor 117% gewijzigd door Verwijderd op 24-12-2003 02:54 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Het is nog steeds zo dat het opslaan van een bestand beter op disk (eventueel buiten de root van je site) kan worden opgeslagen en de url van het bestand in de database.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

P_de_B schreef op 24 december 2003 @ 08:05:
Het is nog steeds zo dat het opslaan van een bestand beter op disk (eventueel buiten de root van je site) kan worden opgeslagen en de url van het bestand in de database.
Erhm, waarom?

Als ik een OutputCache gebruik, icm het opslaan van een bestand in SQL Server, wat is dan het nadeel? Het enige wat ik kan bedenken is dat databaseruimte normaliter duurder is dan diskspace.

Het opslaan in een database van bestanden is daarom niet iets wat per definitie verboden moet zijn.
maar het zou wel eens kunnen gebeuren dat er 10.000-en files (images dus) worden geupload
Van tienduizenden records gaat een normale database niet wakker liggen.

[ Voor 24% gewijzigd door gorgi_19 op 24-12-2003 10:54 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Van tienduizenden records gaat een normale database niet wakker liggen.
Maar van tienduizenden binaire records wel.

Vraag is natuurlijk of je er veel van zult merken maar de performance is minder goed.

Yukon schijnt hier beter mee om te gaan

Oops! Google Chrome could not find www.rijks%20museum.nl


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

P_de_B schreef op 24 december 2003 @ 10:56:
Maar van tienduizenden binaire records wel.
Waarom zou hij hier traag van worden? Of ik nu 10.000 karakters aan 'binaire data' of 10.000 karakters aan leesbare tekens opsla, hoort in principe niet uit te maken.
Vraag is natuurlijk of je er veel van zult merken maar de performance is minder goed.
Als je geen caching gebruikt, ja. Expliciet noemde ik dan ook het gebruik van een soortement van Outputcache, zoals ASP.Net deze kent.
Zie voor dit laatste ook de opmerkingen in deze discussie, waar ik me op zich best in kan vinden, zij het met enkele kanttekeningen.

[ Voor 21% gewijzigd door gorgi_19 op 24-12-2003 11:24 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Waarom zou hij hier traag van worden? Of ik nu 10.000 karakters aan 'binaire data' of 10.000 karakters aan leesbare tekens opsla, hoort in principe niet uit te maken.
omdat (en nu spreek ik voor SQL Server, heb te weinig ervaring met andere RDBMSen) blobvelden buiten de normale row worden opgeslagen.
Als je geen caching gebruikt, ja. Expliciet noemde ik dan ook het gebruik van een soortement van Outputcache, zoals ASP.Net deze kent.
Ok hier ben ik het wel mee eens (de vraag van TS was volgens mij classic asp, vandaar)

Oops! Google Chrome could not find www.rijks%20museum.nl


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

P_de_B schreef op 24 december 2003 @ 11:27:
Ok hier ben ik het wel mee eens (de vraag van TS was volgens mij classic asp, vandaar)
Ik heb geen idee of er ook soortgelijke cachingcomponenten aanwezig zijn voor ASP 3.0; 't zou me niets verbazen. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
gorgi_19 schreef op 24 december 2003 @ 11:29:
[...]

Ik heb geen idee of er ook soortgelijke cachingcomponenten aanwezig zijn voor ASP 3.0; 't zou me niets verbazen. :)
Zullen er inderdaad vast wel zijn.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Ja het is idd ASP waar ik in kloot en niet ASP.net

Ik ga gewoon ff door met vragen. Nu werkt alles prima, heb een file-extensie check gemaakt die dus kijkt of de extensie is toegestaan ja of nee.

Maar nu wil ik de bestandsnaam wijzigen voordat hij geupload wordt. Dus als iemand bijv image2004.gif upload moet deze wijzigen naar bijvoorbeeld 010033.gif die 010033 is dan zijn of haar userid.

Ik weet wel hoe ik de filename uit de code kan trekken en in de database kan stoppen, maar wijzigen is voor mij nog een raadsel.

Ik heb nu het volgende om de extensie eruit te halen, nu de filename nog zonder extensie en vervolgens renamen naar wat anders.
code:
1
2
FileExt = Mid(pstrPath, InStrRev(pstrPath, ".") + 1)
FileExt = UCase(FileExt)


Waarom wil ik dat?
Nou omdat zo alle files een unieke naam krijgen omdat de userid uiteraard ook uniek is.

[ Voor 28% gewijzigd door Verwijderd op 30-12-2003 03:08 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je kunt toch gewoon de .Save methode van je uploader class een andere naam meegeven?

Laat eens het stukje code rondom het opslaan op de server zien

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
P_de_B schreef op 30 december 2003 @ 08:05:
Je kunt toch gewoon de .Save methode van je uploader class een andere naam meegeven?

Laat eens het stukje code rondom het opslaan op de server zien
Ik heb het al. Tis eigenlijk heel makkelijk.

code:
1
filechange = "1234." & fileExt


1234 wordt dan zometeen de variabele userID.
Pagina: 1