Avatar billede karstenl Nybegynder
17. november 2005 - 18:51 Der er 22 kommentarer og
1 løsning

Find allerede eksisterende fil

Hejsa :)

Nogle der kan finde ud af at lave et check på/i nedenstående om filen allerede ér blevet uploadet til serveren/eksistere i forvejen?
---------------------------------------------------

<%
Set Upload = Server.CreateObject("Persits.Upload")
Upload.Save "c:\webs\talkactive\xxxx\xxxx.dk\Upload"

Set File = Upload.Files("THEFILE")

If Not File Is Nothing Then

  Connect = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../../db/ubc/ubc_db.mdb")

    SQL = "UPDATE tbl_linkMaps SET " & _
    " image_blob = ? " & _
    ",image_filename = '" & File.Filename & "'" & _
    ",image_description = '" & Replace(Upload.Form("image_description"), "'", "''") & "'" & _
    ",image_filesize = '" & File.Size & "'" & _
    "WHERE id = " & session("id")
 
  File.ToDatabase Connect, SQL
  Response.Write "<table border=""0"" cellpadding=""3"" cellspacing=""0""><tr><td width=""8"" valign=""top""><img src=""../../../pics/dots/dot.gif"" border=""0""></td><td valign=""top""><font class=""defaulttext"">The picture <b>" & File.Filename & "</b> has now been uploadet and saved.<br><br>Preview:<br></font><img src=../../../upload/" & File.Filename & "><br><font class=""defaulttextlille"">Size in kb.: " & File.Size & "</font><br><br><a href=""java script:history.go(-2);""><img src=""../../../pics/backpil.gif"" border=""0""></a></td></tr></table>"
Else
  Response.Write "File not selected."
End If
%>
Avatar billede karstenl Nybegynder
17. november 2005 - 18:56 #1
Feltet i DB.en hedder:

image_filename

og det er vel der den skal tjekke? :)
Avatar billede softspot Forsker
21. november 2005 - 18:53 #2
<%
Set Upload = Server.CreateObject("Persits.Upload")
Upload.Save "c:\webs\talkactive\xxxx\xxxx.dk\Upload"

Set File = Upload.Files("THEFILE")

If Not File Is Nothing Then

  Connect = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../../db/ubc/ubc_db.mdb")

  sql = "SELECT COUNT(*) FROM tbl_linkMaps WHERE image_filename = '" & File.Filename & "'"
  set rs = Sevrer.CreateObject("ADODB.Recordset")
  rs.open sql, connect, 3, 3
  if not rs.eof then
    bFound = int(rs(0)) > 0
  else
    bFound = false
  end if

  if bFound then
    SQL = "UPDATE tbl_linkMaps SET " & _
      " image_blob = ? " & _
      ",image_filename = '" & File.Filename & "'" & _
      ",image_description = '" & Replace(Upload.Form("image_description"), "'", "''") & "'" & _
      ",image_filesize = '" & File.Size & "'" & _
      "WHERE id = " & session("id")
 
    File.ToDatabase Connect, SQL
  end if

  Response.Write "<table border=""0"" cellpadding=""3"" cellspacing=""0""><tr><td width=""8"" valign=""top""><img src=""../../../pics/dots/dot.gif"" border=""0""></td><td valign=""top""><font class=""defaulttext"">The picture <b>" & File.Filename & "</b> has now been uploadet and saved.<br><br>Preview:<br></font><img src=../../../upload/" & File.Filename & "><br><font class=""defaulttextlille"">Size in kb.: " & File.Size & "</font><br><br><a href=""java script:history.go(-2);""><img src=""../../../pics/backpil.gif"" border=""0""></a></td></tr></table>"
Else
  Response.Write "File not selected."
End If
%>

Hvis ellers jeg har forstået din kode korrekt... :)
Avatar billede karstenl Nybegynder
21. november 2005 - 21:02 #3
Hey igen :)

Kanon du gider hjælpe, tak :)

Har lige prøvet det du har lavet, og det uploader filerne fint til serveren, men det gemmer ikke noget i Databasen.

Jeg får ingen fejlmeddelser.
Avatar billede softspot Forsker
21. november 2005 - 21:13 #4
Sorry! Stor lille fejl fra min side :|

  if bFound then

skal naturligvis være

  if not bFound then

Den skal jo uploade hvis filen IKKE findes og ikke hvis den findes...
Avatar billede karstenl Nybegynder
21. november 2005 - 21:32 #5
Jamen da helt ok :)

Den både gemmer fint i DB. og uploader..

men..

Den overskriver stadig, allerede uploadede filer med samme navn :/

Den den jo helst skal er at evt. skrive en besked om at der allerede findes en fil med det NAVN og at man skal bla bla bla en anden fil.
Avatar billede karstenl Nybegynder
21. november 2005 - 21:33 #6
"Den både gemmer fint i DB. og uploader..".. altså efter rettelsen til " if not bFound then" :)
Avatar billede karstenl Nybegynder
21. november 2005 - 21:38 #7
Inde på: http://www.aspupload.com/manual_db.html

Hvor jeg har det fra, var der et eks. med netop dette, men kunne ikke få det til at virke.
-----------------------------------------------
  ' Optional: check whether this file already exists using MD5 hash
  Hash = File.MD5Hash
  rs.Open "SELECT * from MYIMAGES WHERE Hash='" & Hash & "'", Connect, 2, 3
  If Not rs.EOF Then
      Response.Write "This file already exists in the database."
      Response.End
  End If
  rs.Close
-----------------------------------------------
Ved ikke om dette er dig nogen hjælp.. :)
Avatar billede softspot Forsker
21. november 2005 - 21:44 #8
Da du ikke får nogen runtime-fejl, antager jeg at du har fundet denne stavefejl, men jeg nævner den lige for en god ordens skyld:

  set rs = Sevrer.CreateObject("ADODB.Recordset")

det skal naturligvis være:

  set rs = Server.CreateObject("ADODB.Recordset")

Det undrer mig lidt at den den opaterer og oploader filen selvom filen findes i databasen, da denne funktionalitet jo bliver afskærmet af

if not bFound then

Hvis du vil have skrevet en besked i det tilfælde at filen findes, skal du bare tilføje en else til den if jeg introducerede. Noget á la:

  if bFound then
    SQL = "UPDATE tbl_linkMaps SET " & _
      " image_blob = ? " & _
      ",image_filename = '" & File.Filename & "'" & _
      ",image_description = '" & Replace(Upload.Form("image_description"), "'", "''") & "'" & _
      ",image_filesize = '" & File.Size & "'" & _
      "WHERE id = " & session("id")
 
    File.ToDatabase Connect, SQL

  else
    Response.Write "Filen findes allerede..."
  end if
Avatar billede softspot Forsker
21. november 2005 - 21:47 #9
OK, jeg nåede ikke lige at se dit post fra 21/11-2005 21:38:55, men det den gør er at checke om nøfagtig det pågældende filindhold er uploaded før, dvs. to filer med forskellige navne kan i realiteten give et sammenfald. Det kan også godt være det giver mening i dit scenarie, men det kan modsat også give anledning til lidt forvirring...
Avatar billede karstenl Nybegynder
21. november 2005 - 23:46 #10
Ja det undre også mig, da jeg jo godt kan se hvad funktionen "burde" gøre, selvom jeg ikke lige er hajen til ASP.

Det driller stadig, og overskriver/uploader bare filen på serveren og viser jo så derfor den nyeste (med samme navn) fil uploadet. :/

Jeg prøver lige at smide det hele her så du kan se det :)

-------------------------------------------------------------------
<%
Set Upload = Server.CreateObject("Persits.Upload")
Upload.Save "c:\webs\talkactive\webxxxxxx\xxx.dk\Upload"

Set File = Upload.Files("THEFILE")


If Not File Is Nothing Then

  Connect = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../../db/ubc/ubc_db.mdb")

  sql = "SELECT COUNT(*) FROM tbl_linkMaps WHERE image_filename = '" & File.Filename & "'"
  set rs = Server.CreateObject("ADODB.Recordset")
  rs.open sql, connect, 3, 3
  if not rs.eof then
    bFound = int(rs(0)) > 0
  else
    bFound = false
  end if

  if not bFound then
    SQL = "UPDATE tbl_linkMaps SET " & _
      " image_blob = ? " & _
      ",image_filename = '" & File.Filename & "'" & _
      ",image_description = '" & Replace(Upload.Form("image_description"), "'", "''") & "'" & _
      ",image_filesize = '" & File.Size & "'" & _
      "WHERE id = " & session("id")
 
    File.ToDatabase Connect, SQL
    end if
    Response.Write "Filen blev uploadet."
    else
    Response.Write "Filen findes allerede."
    end if
%>
-------------------------------------------------------------------

Jo jeg fandt stavefejlen "Sevrer" :)
Avatar billede karstenl Nybegynder
21. november 2005 - 23:56 #11
Hov..

Nu ser det da vist ud som om det virker

Nu er det bare de der Response.Write jeg skal have styr på, for den skriver ikke, at filen allerede findes i tilfælde af at den GØR det...

Så jeg ved ikke om jeg evt. måske har lavet DEM forkert:
    end if
    Response.Write "Filen blev uploadet."
    else
    Response.Write "Filen findes allerede."
    end if

?
Avatar billede softspot Forsker
22. november 2005 - 02:02 #12
Jeg tror det er dine indryk der driller dig lidt. Prøv dette i stedet:

<%
Set Upload = Server.CreateObject("Persits.Upload")
Upload.Save "c:\webs\talkactive\webxxxxxx\xxx.dk\Upload"

Set File = Upload.Files("THEFILE")


If Not File Is Nothing Then

  Connect = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../../db/ubc/ubc_db.mdb")

  sql = "SELECT COUNT(*) FROM tbl_linkMaps WHERE image_filename = '" & File.Filename & "'"
  set rs = Server.CreateObject("ADODB.Recordset")
  rs.open sql, connect, 3, 3
  if not rs.eof then
    bFound = int(rs(0)) > 0
  else
    bFound = false
  end if
  rs.close

  if not bFound then
    SQL = "UPDATE tbl_linkMaps SET " & _
      " image_blob = ? " & _
      ",image_filename = '" & File.Filename & "'" & _
      ",image_description = '" & Replace(Upload.Form("image_description"), "'", "''") & "'" & _
      ",image_filesize = '" & File.Size & "'" & _
      "WHERE id = " & session("id")
 
    File.ToDatabase Connect, SQL
    Response.Write "Filen blev uploadet."
  else
    Response.Write "Filen findes allerede."
  end if
end if
%>
Avatar billede karstenl Nybegynder
22. november 2005 - 02:14 #13
Det hjalp ja, nu virker det hele som det skal :)

Taaak for hjælpen :)

Smid venligst et svar.
Avatar billede softspot Forsker
22. november 2005 - 02:26 #14
Velbekomme :)
Avatar billede softspot Forsker
22. november 2005 - 02:34 #15
Tak for point :)
Avatar billede karstenl Nybegynder
22. november 2005 - 14:55 #16
Aii softspot.. nu er den sgu gal igen du gamle *G*

Hvis du gider?.. hehe :)
(Jeg opretter naturligvis et spm. med point "60" til dig) :)

Ville gerne at den lavede et tjek på om filen er størrer, end en forudbestem af mig størrelse.

Jeg har prøvet med dette:
Upload.SetMaxSize 10, True
response.write "Filen er for stor"

Og det virker egentlig "vist nok" også fint nok, den skriver:

Filen er for stor
Persits.Upload.1 error '800a0008'

At least one of the uploaded files exceeds the maximum allowed size.

/firmamappe/ubc/linkmaps/upload_pic_save.asp, line 19
----------

Men kunne man ikke gøre sådan at den ikke kommer med den der fejlmeddelse.? og KUN skriver "Filen er for stor"?



---------------------------------------------
Det hele for god ordens skyld (se i toppen)
---------------------------------------------
<%
Set Upload = Server.CreateObject("Persits.Upload")

Upload.SetMaxSize 10, True
response.write "Filen er for stor"

Upload.Save "c:\webs\talkactive\web7764\cms24.dk\Upload"
Set File = Upload.Files("THEFILE")

If Not File Is Nothing Then

  Connect = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../../db/ubc/ubc_db.mdb")

  sql = "SELECT COUNT(*) FROM tbl_linkMaps WHERE image_filename = '" & File.Filename & "'"
  set rs = Server.CreateObject("ADODB.Recordset")
  rs.open sql, Connect, 2, 3
  if not rs.eof then
    bFound = int(rs(0)) > 0
  else
    bFound = false
  end if

  if not bFound then
    SQL = "UPDATE tbl_linkMaps SET " & _
      " image_blob = ? " & _
      ",image_filename = '" & File.Filename & "'" & _
      ",image_description = '" & Replace(Upload.Form("image_description"), "'", "''") & "'" & _
      ",image_filesize = '" & File.Size & "'" & _
      "WHERE id = " & session("id")
 
    File.ToDatabase Connect, SQL
    Response.Write "Filen blev uploadet."
  else
    Response.Write "Filen findes allerede."
  end if
end if

%>
Avatar billede karstenl Nybegynder
22. november 2005 - 14:56 #17
Upload.SetMaxSize 10

10 <- er naturligvis bare i testen, sætter den højere i færdig udgave.
Avatar billede softspot Forsker
22. november 2005 - 15:43 #18
Jeg har faktisk ikke arbejdet med begrænsning af filstørrelsen for Persits.Upload, men såvidt jeg har forstået, så medfører din opsætning af Upload (dvs. Upload.SetMaxSize 10, true) en fejlmeddelelse hvis en eller flere filer overskrider max-størrelsen. Hvorvidt dette er hensigtsmæssigt eller ej kan man diskutere, for det afhænger af hvilken adfærd du vil understøtte. Med den metode ud har sat op der, vil jeg tro du får svært ved andet end at afvise alle filer, hvis der bare er en som er for stor. Hvis du undlader at rejse en fejl, når der er filer i upload, som er for store (Upload.SetMaxSize 10, false), så kan du lade de filer der holder sig indenfor grænsen gemme i databasen og så bare afvise dem der er for store... men igen så afhænger det af dit behov og den aktuelle applikation.

Hvis du ikke vil afvise alle, så vil jeg mene du skal sætte anden parameter i SetMaxSize til False og så checke for størrelse på hver af filerne der uploades (det kan du jo bruge File.Size til)...
Avatar billede karstenl Nybegynder
22. november 2005 - 16:36 #19
Det ville bare være en ok smart feature at bruge syntes jeg, og/men det er nok mere for min EGEN skyld :) og ikke så meget brugerne af sitet, da den skal ligge i et "lukket" miljø og kun vil blive benyttet af 3 personer, og de VED at de ikke skal uploade nogle kæmpe filer/billeder.

Så behovet er egentlig at ikke have en begrænsning på kan man sige, hvor imod hvis det var en offentlig side, ville det nok være mere hensigtsmæssigt.

Jeg tror jeg holder med scriptet her, og siger at det er tilfredsstillende nok nu.

Igen, tusinde tak for alt hjælpen :)
Avatar billede karstenl Nybegynder
22. november 2005 - 16:39 #20
softspot
---------

http://exp.dk/spm/666523
Avatar billede softspot Forsker
22. november 2005 - 16:47 #21
Du kan i princippet godt slå fejlhåndteringen til, da du jo tilsyneladende kun uploader en fil. Det betyder bare at du skal slå standardfejlhåndteringen fra. Det vil jeg tro du kan gøre således:

<%
on error resume next
Set Upload = Server.CreateObject("Persits.Upload")

Upload.SetMaxSize 10, True

Upload.Save "c:\webs\talkactive\web7764\cms24.dk\Upload"
Set File = Upload.Files("THEFILE")
if err.number <> 0 then
  Response.Write "Filen er for stor"
else
  If Not File Is Nothing Then

    Connect = "Driver={Microsoft Access Driver (*.mdb)}; " & _
          "DBQ=" & Server.MapPath("../../../db/ubc/ubc_db.mdb")

    sql = "SELECT COUNT(*) " & _
      "FROM tbl_linkMaps " & _
      "WHERE image_filename = '" & File.Filename & "'"
    set rs = Server.CreateObject("ADODB.Recordset")
    rs.open sql, Connect, 2, 3
    if not rs.eof then
      bFound = int(rs(0)) > 0
    else
      bFound = false
    end if

    if not bFound then
      SQL = "UPDATE tbl_linkMaps SET " & _
        " image_blob = ? " & _
        ",image_filename = '" & File.Filename & "'" & _
        ",image_description = '" & Replace(Upload.Form("image_description"), "'", "''") & "'" & _
        ",image_filesize = '" & File.Size & "'" & _
        "WHERE id = " & session("id")
 
      File.ToDatabase Connect, SQL
      Response.Write "Filen blev uploadet."
    else
      Response.Write "Filen findes allerede."
    end if
  end if
end if
on error goto 0
%>


P.S. Jeg er ikke helt klar over hvornår fejlen opstår, så det kan godt være du kan flytte "if err.number <> 0 then" lidt højere op, men i princippet burde det der også fungere...
Avatar billede karstenl Nybegynder
22. november 2005 - 18:08 #22
Mener fejlen var lige under:
Upload.SetMaxSize 10, True

Har prøvet ovenstående "16:47:14", og det virker HELT helt perfekt :)

Så taaak igen for det :)
Avatar billede softspot Forsker
22. november 2005 - 18:13 #23
Ingen årsag :)
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