Avatar billede rane Nybegynder
29. september 2006 - 10:27 Der er 11 kommentarer og
1 løsning

Split en sti+filnavn

Jeg har en File Upload funktion, der uploader via AspSmartUpload. Men da AspSmartUpload altid overskriver eksisterende filer har jeg brug for at lave noget kode, før den uploader. Til det skal jeg udtrække filnavet fra den sti, brugeren indtaster.

Eksempel:

C:\Documents & Settings\brugernavn\Billeder\billedenavn.gif
E:\et_dir\billedenavn.gif

skal jeg have udtrukket =  billedenavn.gif

Hvordan får jeg det trukket ud via Split funktionen?

(Det tricky er hvis brugeren har billeder liggende i biblioteker der indeholder et punktum, eks. c:\nye.gif.billeder\billedenavn.gif)
Avatar billede keysersoze Ekspert
29. september 2006 - 10:36 #1
jeg tvivler meget på at du kan hive klientens fulde sti ud på den måde - og så er det også meget mere simpelt end som så;

Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
mySmartUpload.Upload
mySmartUpload.files.item("formfeltnavn").SaveAs "billednavn.gif"
Set mySmartUpload = Nothing
Avatar billede rane Nybegynder
29. september 2006 - 10:42 #2
Uploader den kode bare ikke billedet og overskriver evt. eksisterende billedenavn?

Jeg vil netop undgå at den overskriver eksisterende filer med samme filnavn, men tilgengæld smider folk tilbage til upload siden med en "filnavn eksisterer allerede" besked.
Avatar billede loukas Mester
29. september 2006 - 10:51 #3
Jeg vil foreslå at lave en funktion der giver alle billeder et unikt filnavn når de bliver uploadet.
Så behøves du ikke at kontrollere filnavne fremover.
Avatar billede rane Nybegynder
29. september 2006 - 10:56 #4
Ikke en optimal løsning, da billederne skal bruges til en shop og dermed gerne skulle kunne findes hurtigt igen.

Men kan man ikke på en måde detecte hvor det sidste \ tegn er...og så lave en punktum split på alt indhold efter det tegn?
Avatar billede keysersoze Ekspert
29. september 2006 - 10:57 #5
ser vist ud til at man alligevel kan få den fulde sti; FilePathName

anyway - nu ved jeg ikke præcis hvad du vil frem til men det lyder lidt smartere at angive unikke filnavne. Hvis der endelig er en grund til det kan du bruge .FileName til at få filnavnet ud og så vha FSO checke op på om filen eksisterer i forvejen.
Avatar billede rane Nybegynder
29. september 2006 - 11:35 #6
Det kan godt være at det er mig der ikke forstår AspSmartUpload...men hvis jeg laver nedenstående, så viderestiller den IKKE:

  strTargetPath = Server.MapPath("/Upload")
  Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
   
 
  For each file In mySmartUpload.Files
      response.redirect "test.asp?file=" & file.FileName
  Next
 
  mySmartUpload.Upload
  str = mySmartUpload.Save(strTargetPath)
Avatar billede keysersoze Ekspert
29. september 2006 - 11:55 #7
Det du er ude i virker heller ikke hverken særlig logisk eller hensigsmæssigt - hvis nu der er to filer vil du kun kunne viderestille 1 gang så et loop virker underligt at have. Endelig lukker du ikke for det du har initialiseret hvilket er spild af ressourcer.

dublet = false
Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
mySmartUpload.Upload
If MySmartUpLoad.Files.Item("teaserbillede").FileName <> "" then
  'start loop med FSO
    If LCase(MySmartUpLoad.Files.Item("formfeltnavn").FileExt) = LCase(filnavn fra fso) Then
      dublet = true
    End If
  'loop
  If dublet = false Then
    mySmartUpload.files.item("formfeltnavn").SaveAs "billednavn.gif"
  End If
End If
Set mySmartUpload = Nothing

If dublet = true Then
  'redirect
End If



... eller deromkring
Avatar billede rane Nybegynder
29. september 2006 - 12:16 #8
Nedenstående virker faktisk:

  strTargetPath = Server.MapPath("/Upload")
  Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")

  mySmartUpload.Upload

    For each file In mySmartUpload.Files
    SQL = "SELECT * FROM produkter WHERE VareFilNavn = '" & file.FileName & "'"
    set rs1 = conn.execute(SQL)
    if not rs1.eof then
      response.redirect "test.asp?file=" & file.FileName
    end if
    set rs1 = nothing

  Next
 
  Set mySmartUpload = Nothing
  str = mySmartUpload.Save(strTargetPath)
Avatar billede rane Nybegynder
29. september 2006 - 12:18 #9
Hov..de nederste 2 linjer skal selvfølgelig byttes om.  Og der KAN kun uploades 1 fil i formularen.
Avatar billede keysersoze Ekspert
29. september 2006 - 12:34 #10
troede ikke du gemte filnavn i basen - for når du gør det ville det ellers være let at omdøbe.

I ovenstående skal du huske på, at hvis brugeren redirectes nulstiller du hverken dit recordset eller aspsmartupload.
Avatar billede rane Nybegynder
29. september 2006 - 12:38 #11
Så vidt jeg kan se, nulstiller jeg da recordsettet. Men korrekt...smartupload skal også nulstilles.

Ja, valgte at gemme filnavnet i basen, da jeg indså at det også kunne bruges til andet på sitet.  Men det virker nu.  Du får lidt points for dine gode forslag og de informerende indlæg. :)
Avatar billede keysersoze Ekspert
29. september 2006 - 12:51 #12
du nulstiller først efter du redirecter - altså når den slet ikke til den linie der nulstiller.
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