Jeg har et lille problem med noget upload halløj, vil uploade en fil.. men når jeg så vil uploade en fil der hedder det samme overskriver den den bare, så derfor vil jeg løse det med at den sætter et tal bagved filnavnet hver gang man tilføjer...
min kode som jeg troede til virke er her
' Variables ' ********* Dim mySmartUpload Dim file Dim oConn Dim oRs Dim intCount intCount=0 Session.LCID = 1030 ' Object creation ' *************** Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload") mySmartUpload.Save ' Upload ' ******
' Connect to the DB ' ***************** Set oConn = Server.CreateObject("ADODB.Connection") curDir = Server.MapPath("database/database.mdb") oConn.Open "DBQ="& curDir &";Driver={Microsoft Access Driver (*.mdb)};"
' Select each file ' **************** For each file In mySmartUpload.Files ' Only if the file exist ' ********************** If not file.IsMissing Then
' Add the current file in a DB field ' **********************************
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
dim fundet, i, filnavn fundet = false i = 1 ' start ved 1, ekempsel: test_1.ext
do while fundet = false if not File.Exists(file.FileName & "_" & i) then ' denne linie skal nok rette til ' filen eksisterer ikke = fundet nyt navn filnavn = file.FileName & "_" & i fundet = true ' hop ud af loopen end if i = i + 1 loop
Så er navnet i variablen "filnavn", og du kan bruge den, som du gør nu..
Jeg skrev "nogenlunde", da der skal oprettes forbindelse til FileSystemObject, før man kan bruge File.Exists(..).. mener jeg..
Med mindre, at aspSmartUpload kan tests filer (filnavne), der ikke er med i upload (via formen)..
Det er denne linie, jeg snakker om:
if not File.Exists(file.FileName & "_" & i) then ' denne linie skal nok rette til
Ellers burde det være det.. :-)
---
Det er altid en god ide, at indsætte Option Explicit som den første linie i ASP filen.. så SKAL man definere/dimme alle variablerne (dim fundet, i, ... osv).. Så kan den hjælpe dig, med at finde stavefejl (da disse variabler ikke er defineret/dimmet)..
Vi har afsluttet et projekt, og lige startet på et nyt (de kalder det "miniprojekt".. synes ikke at der er noget "mini" ved det).. og vi skal lave et projekt mere, inden jul.. :-)
Men jeg vil se, om jeg ikke kan lave scriptet, her i weekenden..
Jeg har lavet noget kode, som du kan lægge i ekstern fil (f.eks. "find_fil.asp" eller noget andet), og læg den i samme mappe, som upload-scriptet.
Du inkluderer find_fil.asp med denne linie: <!-- #include file="find_fil.asp" -->
Option Explicit tvinger programmøren til at definere ALLE variabler. På den måde, kan den fortælle dig, hvis du laver stavefejl, da variablerne så ikke eksisterer.
Komplet kode:
<% Option Explicit %> <!-- #include file="find_fil.asp" --> <% ' Variables ' ********* Dim mySmartUpload Dim file Dim oConn Dim oRs Dim intCount intCount=0 Session.LCID = 1030 ' Object creation ' *************** Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload") mySmartUpload.Save ' Upload ' ******
' Connect to the DB ' ***************** Set oConn = Server.CreateObject("ADODB.Connection") curDir = Server.MapPath("database/database.mdb") oConn.Open "DBQ="& curDir &";Driver={Microsoft Access Driver (*.mdb)};"
' Select each file ' **************** For each file In mySmartUpload.Files ' Only if the file exist ' ********************** If not file.IsMissing Then
' Add the current file in a DB field ' **********************************
Jeg har lavet noget kode, som du kan lægge i ekstern fil (f.eks. "find_fil.asp" eller noget andet), og læg den i samme mappe, som upload-scriptet.
Du inkluderer find_fil.asp med denne linie: <!-- #include file="find_fil.asp" -->
Option Explicit tvinger programmøren til at definere ALLE variabler. På den måde, kan den fortælle dig, hvis du laver stavefejl, da variablerne så ikke eksisterer.
Komplet kode:
<% Option Explicit %> <!-- #include file="find_fil.asp" --> <% ' Variables ' ********* Dim mySmartUpload Dim file Dim oConn Dim oRs Dim intCount intCount=0 Session.LCID = 1030 ' Object creation ' *************** Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload") mySmartUpload.Save ' Upload ' ******
' Connect to the DB ' ***************** Set oConn = Server.CreateObject("ADODB.Connection") curDir = Server.MapPath("database/database.mdb") oConn.Open "DBQ="& curDir &";Driver={Microsoft Access Driver (*.mdb)};"
' Select each file ' **************** For each file In mySmartUpload.Files ' Only if the file exist ' ********************** If not file.IsMissing Then
' Add the current file in a DB field ' **********************************
' Display the number of files uploaded ' ************************************ Response.Write(intCount & " file(r) uploaded.<BR>")
' Destruction ' ***********
oConn.Close
Set oConn = Nothing
-------------------------------------------
Koden til find_fil.asp:
<% Function First(s, n, pm) on error resume next ' hvis der opstår fejl, skal den bare fortsætte med resten af koden
' Denne funktioner læser en streng (s) fra venstre (Left), ' og indtil nøgleord (n), og lægger/trækker antal tegn (plusminus) fra/til ' Resultatet er den første del af strengen ("First") ' ' Forklaring: s = streng, n = nøgleord, pm = plusminus
' Hvis pm er 0 eller ingenting, sæt den til -1 if pm = 0 or pm = "" then pm = -1
dim output output = "" ' nulstil output / udskriften
' hvis strengen indeholder nøgleordet, modificer strengen: if instrrev(s, n) > - 1 then output = left(s, instrrev(s, n) + pm)
if err.number = 0 then ' alt er OK = send den modificerede streng tilbage First = output else ' der var fejl = send ingenting / intet tilbage First = "" ' sent tom streng tilbage 'First = "no_ins '" & f & "'" end if End Function
' ------------------
Function Last(s, n, pm, length) on error resume next ' hvis der opstår fejl, skal den bare fortsætte med resten af koden
' Denne funktioner læser en streng (s) fra "midten" (Mid, se *1), ' fra nøgleord (n), og lægger/trækker antal tegn (plusminus) fra/til, ' og har en grænseværdi/længde (length), som den læser indtil, ' hvis længden er defineret ' Resultatet er den sidste del af strengen ("Last") ' ' *1: Mid læser hverken fra venstre (Left) eller højre (Right), ' men kan godt læse fra det første/sidste tegn ' ' Forklaring: s = streng, n = nøgleord, pm = plusminus
' Hvis pm er 0 eller ingenting, sæt den til -1 if pm = 0 or pm = "" then pm = 0
if length = 0 then length = len(n) + 3
dim output output = "" ' nulstil output / udskriften
' hvis strengen indeholder nøgleordet, modificer strengen: if instrrev(s, n) > - 1 then output = mid(s, instrrev(s, n) + pm, length)
if err.number = 0 then ' alt er OK = send den modificerede streng tilbage Last = output else ' der var fejl = send ingenting / intet tilbage Last = "" ' sent tom streng tilbage end if End Function
' ------------------
Function FindFilnavn(upload_filnavn) 'on error resume next ' hvis der opstår fejl, skal den bare fortsætte med resten af koden dim fso, folder Set fso = Server.CreateObject("Scripting.FileSystemObject") ' opret forbindelse til filsystemet Set folder = fso.GetFolder(Server.MapPath(".")) ' sæt mappen til den nuværende mappe
dim tmp tmp = upload_filnavn ' læg det nuværende upload-filnavn over i variablen "tmp"
if fso.FileExists(server.mappath(tmp)) = true then ' Filnavnet eksisterer allerede = der skal genereres et nyt filnavn
' Funktionen First: streng = First(streng, nøgleord, plusminus antal tegn) ' Funktionen Last : streng = Last(streng, nøgleord, plusminus antal tegn, længde)
dim fname ' kommer til at indeholde filnavnet dim fname_wo_ext ' kommer til at indeholde filnavnet, uden filtypen (extension) dim ext ' kommer til at indeholde filtypen (extention) dim c ' kommer til at indeholde tælleren (counter, f.eks. "_1", "_345" osv)
fname = tmp ' smid filnavnet over i variablen "fname" fname = first(fname, "_", 0)
ext = tmp ' smid filnavnet over i variablen "ext" ext = last(ext, ".", 1, 0)
fname_wo_ext = tmp ' smid filnavnet over i variablen "fname_wo_ext"
' sætten fname_wo_ext til streng fname_wo_ext, fra position 0 og til længden ' af streng, minus længden af filtypen, minus 1 = filnavn uden filtype fname_wo_ext = first(fname_wo_ext, instrrev(fname_wo_ext, "."), len(fname_wo_ext) - len(ext) - 1)
c = tmp ' smid filnavnet over i variablen "c" c = last(c, "_", 1, 0) ' hent det der efter det sidste "_" i stengen
' Hvis strengen indeholder "." (til filtypen), forkort tælleren fra position 0 og indtil "." if instr(c, ".") then c = first(c, ".", -1)
' undersøg om vi har fat i et tal (f.eks. "1" fra "_1") if isnumeric(c) = true then ' Det er tal = læg 1 til tælleren c = c + 1 else ' nej, det var noget tekst = dette er den første fil i rækken (f.eks. "test.txt") ' = sæt filnavnet til filnavn uden filtype fname = fname_wo_ext c = 1 ' sæt tælleren til 1, så der kan komme til at stå "test_1.txt" end if
dim search search = true ' vi skal lave en søgning, så vi kan finde det nye navn = TRUE do while search = true ' start en loop, der skal køre, så længe at vi søger
' Sæt filnavn, "_", tæller, "." og filtype sammen, så det bliver til et filnavn: tmp = fname & "_" & c & "." & ext
' Check om den nuværende fil eksisterer if fso.FileExists(server.mappath(tmp)) = false then ' den nuværende fil eksisterer ikke = det er et nyt filnavn search = false ' slå "søgningen" fra = sæt den til FALSE exit do ' hop ud af loopen end if
c = c + 1 ' vi har ikke fundet det nye filnavn endnu = læg 1 til tælleren loop
end if
set folder = nothing ' frigør/destruer objekt-variablerne set fso = nothing ' frigør/destruer objekt-variablerne
FindFilnavn = tmp ' returnere filnavnet der skal bruges End Function %>
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.