Avatar billede bjoern_bertelsen Nybegynder
14. maj 2006 - 16:48 Der er 6 kommentarer og
1 løsning

smartupload omdøbning af filnavn til uniktfilnavn

Hejsa, jeg benytter mig at aspsmartupload komponenten til at uploade billeder til et galleri. Alle billederne ryger i en stor mappe, hvorefter jeg sorterer i dem via data jeg har lagt i db. Men for at undgå at billeder bliver overskrevet hvis 2 billeder med samme filnavn bliver forsøgt lagt op, hvad skal jeg så gøre?

Jeg forestillede mig noget i stil med at man lige kontrollerede for hvert billede man uploadede, om der lå et billede med samme navn på serveren, og så man tilføjede noget ekstra til navnet lige som windows gør, når der er kopier af fx samme word dokument.

Det kan måske også gøres meget nemmere, plz tell me!

Her er et udsnit af koden, hvor det kan ses hvordan jeg gemmer filen på serveren:

  For each file In mySmartUpload.Files
  '  Only if the file exist
  '  **********************
      If not file.IsMissing Then
      filnavn = file.FileName
      '**** Du kan her tjekke for "ulovlige" tegn og fjerne dem ****
      filnavn = replace(filnavn," ","_")
      filnavn = replace(filnavn,"å","aa")
      filnavn = replace(filnavn,"æ","ae")
      filnavn = replace(filnavn,"ø","oe")
     
      file.SaveAs("/klassen/galleri/"& filnavn)
Avatar billede cyberkox Nybegynder
14. maj 2006 - 17:27 #1
Se, du har vel alle filnavne stående i en db. Så er det bar at lave en SQL forespørgsel på om den findes og hvis, så siger du vel bare:

filnavn = "1"& filnavn
Avatar billede loukas Mester
14. maj 2006 - 20:34 #2
Jeg har selv brugt now() til at give unikke filnavne. Ja ok, hvis nogen stiller tiden tilbage på serveren er muligheden for dubletter der, men sansynligheden er MEGET lille.

rFilNavn = now()
rFilNavn = Replace(rFilNavn,":", "")
rFilNavn = Replace(rFilNavn,"\", "")
rFilNavn = Replace(rFilNavn,"/", "")
rFilNavn = Replace(rFilNavn,"-", "")
rFilNavn = Replace(rFilNavn," ", "")
strNytFilnavn = rFilNavn & "_" & filnavn
Avatar billede bjoern_bertelsen Nybegynder
15. maj 2006 - 21:04 #3
cyberkox den holder ikke hvis man uploader et billede med samme navn mere end én gang. Og det sker formentlig idet mange digitalkameraer navngiver billederne på samme måde. Fx. min fuji kamera kalde dem alle IMG_XXXXX (XXX = tal), og hver gang jeg sletter alt på kameraet starter den forfra med IMG_00001 osv.

loukas jeg tror jeg forsøger mig med din, så er det i hvert fald unikke navne, det kan man ikke slippe udenom. Tror dog jeg vil bruge dato og filnavn, så datoen ryger ind foran selve filens navn.

Jeg tester lige, og vender tilbage.
Avatar billede bjoern_bertelsen Nybegynder
21. maj 2006 - 18:02 #4
det virker jo helt fint, takker. Smid svar og du får point!
Avatar billede cyberkox Nybegynder
29. maj 2006 - 12:05 #5
Hvem ska smide et svar?

Jeg er ved at lave en upload funktion af billeder og jeg kan se det faktisk er samme måde du gør det på.

Men hvordan gør du helt præcist, kan jeg måske se hele dit script?
Avatar billede bjoern_bertelsen Nybegynder
29. maj 2006 - 18:26 #6
loukas skal smide et svar, det var hans der virkede.

mht. mit script så kommer det her:

OBS! Som forklaring skal det lige siges at jeg har delt db'en op i to tabeller:

gallerioversigt = her ses hovedinfo for hver serie i galleriet. Primærnøgle er galleriID
galleri = her er selve filinfo for samtlige billeder i galleriet. Primærnøgle er billedID. Her benytter jeg galleriID som fremmednøgle til at kode gallerioversigt og galleri -tabellerne sammen.

Følgende uploadfunktion benytter jeg, når jeg opretter et nyt galleri samtidig med jeg uploader billeder til dette:

'  Variables
'  *********
  Dim mySmartUpload
  Dim intCount
  Dim file

'  HER ÅBNER VI DB FOR AT FÅ DET HØJESTE ID FRA GALLERIOVERSIGTEN + BRUGERNAVN
'  ****************************************************************

dim Conn, DSN
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../administration.mdb")
Conn.Open DSN ' Åbner databaseforbindelsen

Dim galleriID
strSQL = "SELECT MAX(gallerioversigt.GalleriID) FROM gallerioversigt;"
Set rs = Conn.Execute(strSQL)
galleriID = rs.fields("Expr1000")+1
   
strSQL = "SELECT fornavn FROM brugere WHERE brugernavn='"&session.contents("login")&"';"
Set rs = Conn.Execute(strSQL)
bruger = rs("fornavn")

'  OBJECT CREATION
'  ***************
  Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")

'  UPLOAD
'  ******
  mySmartUpload.Upload

'  HER GEMMER VI I DATABASEN DATA FOR DE NYE BILLEDER
'  ****************************************************************

Set oConn = Server.CreateObject("ADODB.Connection")
curDir = Server.MapPath("../administration.mdb")
oConn.Open "DBQ="& curDir &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
   
  strSQL2 = "SELECT * FROM galleri"

  Set oRs = Server.CreateObject("ADODB.recordset")
  Set oRs.ActiveConnection = oConn
  oRs.Source = strSQL2
  oRs.LockType = 3
  oRs.Open

'  HER LØBER VI IGENNEM EN LØKKE, FOR HVER ENESTE FIL VI VIL UPLOADE
'  ******************************************************************
  For each file In mySmartUpload.Files
      If not file.IsMissing Then
      filnavn = file.FileName

      '**** Du kan her tjekke for "ulovlige" tegn og fjerne dem ****
      filnavn = replace(filnavn," ","_")
      filnavn = replace(filnavn,"å","aa")
      filnavn = replace(filnavn,"æ","ae")
      filnavn = replace(filnavn,"ø","oe")
     
      rFilNavn = now()
      rFilNavn = Replace(rFilNavn,":", "")
      rFilNavn = Replace(rFilNavn,"\", "")
      rFilNavn = Replace(rFilNavn,"/", "")
      rFilNavn = Replace(rFilNavn,"-", "")
      rFilNavn = Replace(rFilNavn," ", "")
      strNytFilnavn = rFilNavn & "_" & filnavn
     
      ' HER GEMMER VI SÅ FILEN FYSISK
      ' *****************************     
      file.SaveAs("/klassen/galleri/"& strNytFilnavn)

      '  HER TILFØJER VI, FOR HVER FIL, DATA I DB
      '  ****************************************
        oRs.AddNew
        oRs("billednavn") = strNytFilnavn
        oRs("galleriID") = galleriID
        oRs("navn") = bruger
        oRs("dato") = now
        oRs.Update
        intCount = intCount + 1
      End If
  Next
 
'  HER ÅBNER VI DB FOR AT FÅ DET HØJESTE ID FRA GALLERIOVERSIGTEN
'  ****************************************************************

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../administration.mdb")
Conn.Open DSN ' Åbner databaseforbindelsen

'  HER GEMMER VI GALLERIINFO TIL GALLERIOVERSIGTEN
'  *************************************************
strSQL = "Insert into gallerioversigt (GalleriID, navn, dato, titel) values('"&galleriID&"','"&bruger&"','"&now&"','"&mysmartupload.Form("mappe")&"')"
Conn.Execute(strSQL) ' læg mærke til at vi udfører sql-sætningen med det samme.
   
Conn.Close
Set Conn = Nothing

Response.redirect "galleriindex2.asp"
Avatar billede loukas Mester
04. juni 2006 - 00:04 #7
Ok her er jeg så lidt sent ude.
Igen ;-) ---
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