Avatar billede denz Nybegynder
18. november 2005 - 11:57 Der er 15 kommentarer

aspSmartUpload uden at overskrive

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
'  ******
 
  mySmartUpload.Upload
'  ******
  intCount = mySmartUpload.Save("filarkiv")                     

'  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 = 0
i = i + 1

filnavn = file.FileName & "_"& i

SQL     = "INSERT INTO TFILES (kid,Filename) VALUES ("&"'"& mySmartUpload.Form("form_cat")&"','" & filnavn & "' )"
      oConn.Execute (SQL)
'SQLcat  = "INSERT INTO katagori (kategorier) VALUES ("&"'"& request.Form("form_cat") &"')"

        intCount = intCount
      End If
  Next

'  Display the number of files uploaded
'  ************************************
  Response.Write(intCount & " file(r) uploaded.<BR>")

'  Destruction
'  ***********

  oConn.Close

  Set oConn = Nothing

skal vel lave et slags loop men ved ikke helt hvor.. plz help mE!
Avatar billede denz Nybegynder
18. november 2005 - 12:02 #1
så den f.eks laver filnavnet om til filnavn_1 og næste man uploader bliver filnavn_2
Avatar billede thesurfer Nybegynder
18. november 2005 - 13:01 #2
Jeg kunne forestille mig, at det er her:

i = 0
i = i + 1

filnavn = file.FileName & "_"& i

Det skal nok se sådan ud (nogenlunde):

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)..

/theSurfer
Avatar billede denz Nybegynder
18. november 2005 - 13:08 #3
men kan jeg godt have oprettet forbindelse til både FileSystemObject og aspSmartUpload
Avatar billede denz Nybegynder
18. november 2005 - 13:16 #4
og hvordan opretter jeg til FileSystemObject ?? :D
Avatar billede denz Nybegynder
18. november 2005 - 13:32 #5
har fået det til at virke.. men den skriver kun _1 bag ved alle filer.. men den skal + jo..
Avatar billede thesurfer Nybegynder
18. november 2005 - 22:16 #6
Kigger lige på det i morgen, hvis jeg har tid.. ellers må andre meget gerne komme med gåde råd..

/theSurfer
Avatar billede thesurfer Nybegynder
20. november 2005 - 16:51 #7
Skal de alle sammen f.eks. hedde "xxxxxxxx_1.txt"?
Dvs "xxxxxxxx" erstattes af samme navn (f.eks. "filnavn").

Eksempel:

1)
hest.jpg uploades og bliver til: filnavn_1.jpg
bil.jpg uploades og bliver til: filnavn_2.jpg

2)
hest.jpg uploades og bliver til: hest.jpg
hest.jpg uploades igen og bliver til: hest_1.jpg
hest.jpg uploades igen og bliver til: hest_2.jpg

Hvilket eksempel, er det du vil have?

/theSurfer
Avatar billede denz Nybegynder
21. november 2005 - 08:05 #8
Eksempel 2 det er lige præcis sådan jeg mener
Avatar billede thesurfer Nybegynder
22. november 2005 - 23:36 #9
Jeg vil se, om jeg kan få kigget på det i morgen.

/theSurfer
Avatar billede thesurfer Nybegynder
25. november 2005 - 21:57 #10
Jeg har ikke fået kigget på det endnu..

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..

/theSurfer
Avatar billede thesurfer Nybegynder
27. november 2005 - 15:20 #11
Så er den der vist..

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
'  ******
 
  mySmartUpload.Upload
'  ******
  intCount = mySmartUpload.Save("filarkiv")                     

'  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
      '  **********************************

filnavn = FindFilnavn(file.FileName)

SQL    = "INSERT INTO TFILES (kid,Filename) VALUES ("&"'"& mySmartUpload.Form("form_cat")&"','" & filnavn & "' )"
      oConn.Execute (SQL)
'SQLcat  = "INSERT INTO katagori (kategorier) VALUES ("&"'"& request.Form("form_cat") &"')"

        intCount = intCount
      End If
  Next

'  Display the number of files uploaded
'  ************************************
  Response.Write(intCount & " file(r) uploaded.<BR>")

'  Destruction
'  ***********

  oConn.Close

  Set oConn = Nothing

/theSurfer
Avatar billede thesurfer Nybegynder
27. november 2005 - 15:23 #12
Vi prøver lige igen..

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
'  ******
 
  mySmartUpload.Upload
'  ******
  intCount = mySmartUpload.Save("filarkiv")                     

'  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
      '  **********************************

filnavn = FindFilnavn(file.FileName)

SQL    = "INSERT INTO TFILES (kid,Filename) VALUES ("&"'"& mySmartUpload.Form("form_cat")&"','" & filnavn & "' )"
      oConn.Execute (SQL)
'SQLcat  = "INSERT INTO katagori (kategorier) VALUES ("&"'"& request.Form("form_cat") &"')"

        intCount = intCount
      End If
  Next

'  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
%>

/theSurfer
Avatar billede thesurfer Nybegynder
10. december 2005 - 02:08 #13
Har du fået testet det..?

/theSurfer
Avatar billede thesurfer Nybegynder
20. december 2005 - 21:43 #14
Hvordan går det? :-)

/theSurfer
Avatar billede thesurfer Nybegynder
28. juli 2006 - 15:02 #15
Hello?
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
Kurser inden for grundlæggende programmering

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