[ASP] file upload naam mee geven

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

Onderwerpen


  • wd200
  • Registratie: Juni 2005
  • Laatst online: 10:51
Ik heb een upload scriptje voor het uploaden van files naar een directory.

Op dit moment gebeurt dat met dit simpele scriptje
<%
Set Upload = Server.CreateObject("Persits.Upload")

Count = Upload.Save("c:\test")

Response.Write Count & " file(s) uploaded to c:\test"


%>

Werkt perfect :)

Alleen ik zou graag willen dat de naam van de file veranderd wordt bij uploading.
De naam moet dezelfde naam zijn als de hoogste waarde van ID in de database.
Nu is dat het probleem niet maar hoe geef ik een bestandnaam een waarde mee?

Ik dacht ongeveer:

DIM file_name
file_name = 10 (even een vaste waarde als voorbeeld)

Dim File
For Each File In upload
File.names = filename
Next

Of iets in die trendt ik ben op GOT en google aan het zoeken geslagen maar er is veel verschillende manieren over asp en uploading te vinden.

Helaas is dit niet zo makkelijk als PHP.

Kan iemand mij misschien even helpen om me op het goede spoor te zetten.

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 13:30

Cyphax

Moderator LNX
Upload je meerdere bestanden tegelijk?
Dan moet je in je for each-loopje even het hoogste ID (`max([ID])`, waarbij [ID] de naam van het veld is) opvragen uit de database, dat is dan zeg maar wat je nu filename hebt genoemd.
Als je maar één bestand tegelijk upload doe je hetzelfde maar dan niet in een for each.

Zo nodig is hier nog een voorbeeldje van databaseverbindingen.

[ Voor 14% gewijzigd door Cyphax op 22-02-2007 09:56 ]

Saved by the buoyancy of citrus


  • wd200
  • Registratie: Juni 2005
  • Laatst online: 10:51
Nee het wordt maar een bestand tegelijk.

De hoogste waarde toevoegen is het probleem niet maar die "variabele" aan het bestand toekenenn :(

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

gorgi_19

Kruimeltjes zijn weer op :9

Dat is toch Upload.Save("c:\test") aanpassen met een andere bestandsnaam? :?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • wd200
  • Registratie: Juni 2005
  • Laatst online: 10:51
gorgi_19 schreef op donderdag 22 februari 2007 @ 10:07:
Dat is toch Upload.Save("c:\test") aanpassen met een andere bestandsnaam? :?
Dit is gewoon de map waar die naar toegaat.
ik heb het geprobeerd om van c:\test iets anders te maken maar dat werkt niet.

c:\test\naam
c:\test\naam.jpg

Het idee was goed maar ligt denk ik te voor de hand :S

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

gorgi_19

Kruimeltjes zijn weer op :9

wd200 schreef op donderdag 22 februari 2007 @ 10:13:
[...]


Dit is gewoon de map waar die naar toegaat.
ik heb het geprobeerd om van c:\test iets anders te maken maar dat werkt niet.

c:\test\naam
c:\test\naam.jpg

Het idee was goed maar ligt denk ik te voor de hand :S
En wat krijg je dan? Een foutmelding? Heeft je IUSR_account wel schrijfrechten op die folder?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • wd200
  • Registratie: Juni 2005
  • Laatst online: 10:51
gorgi_19 schreef op donderdag 22 februari 2007 @ 10:16:
[...]

En wat krijg je dan? Een foutmelding? Heeft je IUSR_account wel schrijfrechten op die folder?
ooh ja laat ik dat ook mee posten is handig hebben jullie misschien wat aan.

ik krijg deze melding

Technische informatie (voor ondersteunend personeel)

* Soort fout:
Persits.Upload.1 (0x800A0005)
Het systeem kan het opgegeven pad niet vinden.
/wesley/doeland/uploadscript1.asp, line 12


Ik heb alle users toegang gegevens tot de map (test opstelling) want ik had ook al een issue met het benaderen van me acces database.
maar normaal uploaden naar die map lukt wel (met alleen c:\test) dus aan de user kan het niet liggen lijkt mij.

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 14:57

sopsop

[v] [;,,;] [v]

Heb je de manual van ASPUpload al bekeken? http://www.aspupload.com/Manual.htm

Daar zie ik namelijk gewoon dit staan
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%
Set Upload = Server.CreateObject("Persits.Upload.1")
' ensure a unique name when calling File.SaveAs
Upload.OverwriteFiles = False
Count = Upload.SaveToMemory

If Count = 1 Then ' 1 file uploaded
    Set File = Upload.Files(1)

  ' retrieve destination file name from a HIDDEN form item
    Path = "c:\upload\" & Upload.Form("Filename")
    ' Side effect: SaveAs sets changes File.Path property to a new value.
    File.SaveAs Path
    Response.Write "File was saved as " & File.Path
Else
    Response.Write "No files were uploaded."
End If
%>

Waarbij je Upload.Form("Filename") gewoon kunt vervangen door een door jou te kiezen bestandsnaam.

Die .SaveAs-methode kun je het beste gebruiken i.c.m. de .SaveToMemory methode omdat bij een normale save je bestanden kunt overschrijven, waarna je een rename van dat overschreven bestand doet. Daarnaast is de .SaveToMemory sneller omdat dit geen diskacties vergt.

Je methode om de bestandsnaam te koppelen aan het ID van een record in de database zie ik persoonlijk niet zo zitten. Je kunt veel beter een kolom toevoegen in je database met daarin een verwijzing naar de bestandsnaam. En die bestandsnaam zou ik opbouwen uit een timestamp + de originele bestandsnaam (bijv: 464887946_foto.jpg). De kans op dubbele bestandsnamen is dan miniem.

[ Voor 28% gewijzigd door sopsop op 22-02-2007 10:34 ]


  • wd200
  • Registratie: Juni 2005
  • Laatst online: 10:51
Dankje wel :)

neeh heb de handleiding idd niet gelezen, maar heb hem nu gebookmarkt. :)
Over welke naam de file krijgt kan ik later nog nadenken.
De kan bij een ID dat de naam het zelfde wordt is onmogelijk want ID is autonummering.

Ik dacht namelijk aan.
gegevens invoeren en later pas de foto uploaden (volgende pagina).

maar dat is voor latere zorg nu moet ik zorgen dat dit werkt, hij loop nu te zeuren met c:/upload over toegangs rechten.
Het liefste heb ik een pad zoals ../images maar dit werkt nog niet :)
maar ben goed op weg alvast bedankt

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 14:57

sopsop

[v] [;,,;] [v]

wd200 schreef op donderdag 22 februari 2007 @ 10:43:
[..]
De kan bij een ID dat de naam het zelfde wordt is onmogelijk want ID is autonummering.
Ik dacht namelijk aan.
gegevens invoeren en later pas de foto uploaden (volgende pagina).
[..]
Die kans lijkt me dan vrij groot eerlijk gezegd. Stel er voeren twee personen nagenoeg gelijk de gegevens in. Je kunt dan iig niet met max-id werken.
Eerst de gegevens invoeren, opslaan in de database en vervolgens een foto uploaden gaat ook prima. Je kunt dan gewoon het aangemaakte record in de database bijwerken en de naam van het bestand toevoegen in dat record (hoewel je dan ook niet met max-id moet werken).

  • wd200
  • Registratie: Juni 2005
  • Laatst online: 10:51
sopsop schreef op donderdag 22 februari 2007 @ 10:57:
[...]

Die kans lijkt me dan vrij groot eerlijk gezegd. Stel er voeren twee personen nagenoeg gelijk de gegevens in. Je kunt dan iig niet met max-id werken.
Eerst de gegevens invoeren, opslaan in de database en vervolgens een foto uploaden gaat ook prima. Je kunt dan gewoon het aangemaakte record in de database bijwerken en de naam van het bestand toevoegen in dat record (hoewel je dan ook niet met max-id moet werken).
Ja op zo manier klopt heb ik niet aangedacht omdat er toch maximaal 1 user tegelijk aan gaat werken.
maar idd ivm met de toekomst is het beter of een andere naam te kiezen :)

[ Voor 16% gewijzigd door wd200 op 22-02-2007 11:52 ]


  • wd200
  • Registratie: Juni 2005
  • Laatst online: 10:51
Ik wil even verder gaan in dit topic.

kan de afbeelding natuurlijk ook oproepene door de file name te gebruiken die (nu) weggeschreven wordt in de DB.

Zit nu alleen met een probleem dat ik de waarde van 2 query's wil weten maar dat ding doet wat ik wil om het netjes te zeggen.

Ik wil nu.

De uitslag van een query aan een variable hangen.
Heb ik gedaan met
<%


SQL = "SELECT * FROM data where id = (select max(id) from data)"

set objRec = objCon.execute(SQL)

%>

<% dim max
max = objRec.Fields("id").Value
%>

Nu wil ik een nieuwe query maken waarbij ik gebruik van de max waarde dus met


SQL = "SELECT * FROM data where id = max"

met php is het

$max

sq;l = select * from data where id = $ max
$result = mysql_query (sql)

en dan met object

$naam = $row->naam

en dan kan je evt met $ naam weer verder gaan

Ik weet dit standaard asp / access vaardigheden zijn maar ik kom er niet uit
(verwacht geen opmerkingen van "koop een boek" ofzo we zijn hier om elkaar te helpen)


________________________________------------------------------________________________

nog een bassis vraagje waar ik niet uit kom
Ik heb
' Build SQL INSERT statement
SQL = "INSERT INTO data( filename, tekst, filesize) VALUES( '"
SQL = SQL & File.Filename & "', '"
SQL = SQL & Replace(Upload.Form("DESCR"), "'", "''") & "', "
SQL = SQL & File.Size & ")"

Hierin moet in het veld naam nog een waarde worden toegevoegd die die leest uit een formulier. van de vorige pagina (wordt verzonden met POST) net zoals bij DESCR.

Ik dacht hieraan maar het werkt niet :S

SQL = "INSERT INTO data( filename, tekst, filesize, naam) VALUES( '"
SQL = SQL & File.Filename & "', '"
SQL = SQL & Replace(Upload.Form("DESCR"), "'", "''") & "', "
SQL = SQL & File.Size &
Replace(Upload.Form("naam"), "'", "''") & ")"

dit geeft als error
Soort fout:
Compilatiefout Microsoft VBScript (0x800A03EA)
Syntaxisfout
/wesley/doeland/uploadscript1.asp, line 25, column 23
SQL = SQL & File.Size &

[ Voor 32% gewijzigd door wd200 op 22-02-2007 13:52 ]


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 14:57

sopsop

[v] [;,,;] [v]

Je string wordt dan:
code:
1
"SELECT * FROM Data Where Id=" & Max

  • wd200
  • Registratie: Juni 2005
  • Laatst online: 10:51
sopsop schreef op donderdag 22 februari 2007 @ 13:52:
Je string wordt dan:
code:
1
"SELECT * FROM Data Where Id=" & Max
met dat gedeelte kan ik nog leven dat snap ik nog :)
maar hoe hang ik daar net zoals bij PHP bv een object of array aan ?

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 14:57

sopsop

[v] [;,,;] [v]

wd200 schreef op donderdag 22 februari 2007 @ 14:42:
[...]


met dat gedeelte kan ik nog leven dat snap ik nog :)
maar hoe hang ik daar net zoals bij PHP bv een object of array aan ?
Ah. Je bedoelt de recordset.
Lees hier maar eens: http://www.w3schools.com/ado/ado_recordset.asp

Sowieso zijn de w3schools ado- en asp-sectie wel een redelijke basis.

  • bastv
  • Registratie: September 2005
  • Laatst online: 06-10 20:56
ff snel kopieren plakwerk. zo doe ik het altijd
ASP:
1
2
3
4
5
6
7
8
9
10
11
    insertSQL = "SET dateformat dmy INSERT INTO projecten (naam,soort,aanvrager,opsteldatum,startdatum,einddatum,eigenaar,prioriteit,omschrijving) " 
    insertSQL = insertSQL & "VALUES ('" &Replace(Request.form("projectnaam"), "'", "''")& "'," 
    insertSQL = insertSQL & " '"&Request.form("projectsoort")&"'," 
    insertSQL = insertSQL & " '"&Request.form("projectaanvrager")&"'," 
    insertSQL = insertSQL & " '"&date()&"'," 
    insertSQL = insertSQL & " '"&Request.form("startdatum")&"'," 
    insertSQL = insertSQL & " '"&Request.form("einddatum")&"'," 
    insertSQL = insertSQL & " '"&Request.form("projecteigenaar")&"'," 
    insertSQL = insertSQL & " '"&Request.form("prioriteit")&"'," 
    insertSQL = insertSQL & "'" & Replace(Request.form("omschrijving"), "'", "''") & "'" & ")" 
    DB_projecten.Execute insertSQL

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

gorgi_19

Kruimeltjes zijn weer op :9

bastv schreef op donderdag 22 februari 2007 @ 16:26:
ff snel kopieren plakwerk. zo doe ik het altijd
ASP:
1
2
3
4
5
6
7
8
9
10
11
    insertSQL = "SET dateformat dmy INSERT INTO projecten (naam,soort,aanvrager,opsteldatum,startdatum,einddatum,eigenaar,prioriteit,omschrijving) " 
    insertSQL = insertSQL & "VALUES ('" &Replace(Request.form("projectnaam"), "'", "''")& "'," 
    insertSQL = insertSQL & " '"&Request.form("projectsoort")&"'," 
    insertSQL = insertSQL & " '"&Request.form("projectaanvrager")&"'," 
    insertSQL = insertSQL & " '"&date()&"'," 
    insertSQL = insertSQL & " '"&Request.form("startdatum")&"'," 
    insertSQL = insertSQL & " '"&Request.form("einddatum")&"'," 
    insertSQL = insertSQL & " '"&Request.form("projecteigenaar")&"'," 
    insertSQL = insertSQL & " '"&Request.form("prioriteit")&"'," 
    insertSQL = insertSQL & "'" & Replace(Request.form("omschrijving"), "'", "''") & "'" & ")" 
    DB_projecten.Execute insertSQL
:X
En heeft nog niemand je database gesloopt?
* gorgi_19 mompelt iets over SQL Injection

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • bastv
  • Registratie: September 2005
  • Laatst online: 06-10 20:56
gorgi_19 schreef op donderdag 22 februari 2007 @ 16:53:
[...]

:X
En heeft nog niemand je database gesloopt?
* gorgi_19 mompelt iets over SQL Injection
is een intranet sessie :) als iemand dat ooit al eens zou proberen sturen we een grote neger langs

Acties:
  • 0 Henk 'm!

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 14:57

sopsop

[v] [;,,;] [v]

bastv schreef op vrijdag 23 februari 2007 @ 09:13:
[...]


is een intranet sessie :) als iemand dat ooit al eens zou proberen sturen we een grote neger langs
That's not the point. Slechte gewoontes zijn moeilijk af te leren.

Acties:
  • 0 Henk 'm!

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

gorgi_19

Kruimeltjes zijn weer op :9

bastv schreef op vrijdag 23 februari 2007 @ 09:13:
[...]


is een intranet sessie :) als iemand dat ooit al eens zou proberen sturen we een grote neger langs
Henk's project als soort zorgt ook al voor een crash ;)
Jacques D'ancona als naam eveneens :)

[ Voor 7% gewijzigd door gorgi_19 op 23-02-2007 12:00 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • bastv
  • Registratie: September 2005
  • Laatst online: 06-10 20:56
gorgi_19 schreef op vrijdag 23 februari 2007 @ 11:59:
[...]

Henk's project als soort zorgt ook al voor een crash ;)
Jacques D'ancona als naam eveneens :)
projectsoort is een id dat door een selectbox uit een ander tabel word gehaald
eigenaar is het personeelsnummer dat ook word uitgelezen uit ons personeelssysteem

kortom niks verkeerds mee :)

Acties:
  • 0 Henk 'm!

  • wd200
  • Registratie: Juni 2005
  • Laatst online: 10:51
Uiteindelijk heb ik het ik het te moeilijk gezocht heb de file name weg laten schrijven naar de database natuurlijk veel makkelijker en het werkt. :)

ik zit nu met een andere probleem.
Het editten van deze waarde.

dus waarde filename in de DB moet gewijzigd worden met een update script.
ik heb dit

SQL = "UPDATE data SET filename = '" & file.filename & "' where id = '" & Replace(Upload.Form("id"), "'", "''") & "'"

Dit werkt niet ik krijg deze error

Soort fout:
Persits.Upload.1 (0x800A001C)
[Microsoft][ODBC Microsoft Access-stuurprogramma] Gegevenstypen komen niet overeen in criteriumexpressie.
/wesley/doeland/fotowijz.asp, line 27


Als ik ID hard invoer dus where id = '99'
doet die het wel en wordt filename in de DB aangepast.

maar omdat ik het via een upload vorm doe kan ik de where id niet opvragen met request dit kan gewoon niet.


hier de hele code

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
26
27
<%

    
    Set Upload = Server.CreateObject("Persits.Upload")

    ' Capture files
    Upload.SaveVirtual "images"

    ' Obtain file object
    Set File = Upload.Files("foto")


        ' Build ODBC connection string
        Connect = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath(".\database.mdb")

        ' If you use SQL Server, the connecton string must look something like this:
        ' Connect = "Driver=SQL Server;Server=MYSRV;Database=master;UID=sa;PWD=xxx"

        ' Build SQL INSERT statement
    SQL = "UPDATE data SET filename = '" & file.filename & "' where id = '" & Replace(Upload.Form("id"), "'", "''") & "'"


        ' Save to database
        File.ToDatabase Connect, SQL
        Response.Write "File saved."

%>

Acties:
  • 0 Henk 'm!

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

gorgi_19

Kruimeltjes zijn weer op :9

Id zal waarschijnlijk een numeriek veld zijn en dan mag je niet met '' werken. Oftewel goed:
SQL:
1
Update tabelnaam SET TextValue  = 'dfds', NumberValue = 4 WHERE ID = 2

fout:
SQL:
1
Update tabelnaam SET TextValue  = 'dfds', NumberValue = '4' WHERE ID = '2'

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • wd200
  • Registratie: Juni 2005
  • Laatst online: 10:51
Dit is de code

code:
1
2
3
4
5
6
7
8
9
10
11
12
<%

    
    Set Upload = Server.CreateObject("Persits.Upload")
    Upload.SaveVirtual "images"
    Set File = Upload.Files("foto")
        Connect = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath(".\database.mdb")
    SQL = "UPDATE data SET filename = '" & file.filename & "' where id = '" & Replace(Upload.Form(id), "'", "''") & "'"
        File.ToDatabase Connect, SQL
        Response.Write "File saved."

%>


dit geeft de melding
# Soort fout:
Persits.Upload.1 (0x800A001C)
[Microsoft][ODBC Microsoft Access-stuurprogramma] Gegevenstypen komen niet overeen in criteriumexpressie.
line 12

Zonder " "

code:
1
    SQL = "UPDATE data SET filename = '" & file.filename & "' where id = '" & Replace(Upload.Form(id), "'", "''") & "'"


Soort fout:
Persits.Upload.1 (0x800A0009)
Index out of range. line 11


//edit


Bedankt gorgi

de ' aan het begin en eind moesten idd weg :)

Het werk

[ Voor 199% gewijzigd door wd200 op 05-03-2007 09:11 ]

Pagina: 1