Avatar billede webbygger Nybegynder
15. februar 2005 - 21:17 Der er 15 kommentarer og
1 løsning

Upload af billed til database og mappe !

Det er godt nok utroligt at jeg ikke kan får ét af alle de script jeg har fundet til at virke......(hmm med nærmere omtanke fortæller det vel bare at jeg er en klovn til ASP).

Jeg har en form side, hvor jeg godt kunne bruge et upload-felt.
Billedet skal gemmes i en mappe og billedes navn (eks. logo.jpg) i databasen (access). Har følgende komponenter til rådighed :

aspSmartUpload
AspUPLOAD
AspXUpload
Avatar billede webbygger Nybegynder
15. februar 2005 - 22:28 #1
Det script jeg har mest til tro til er eagleeyes, jeg har prøvet at tilpas det, men uden det store held !!!

http://www.web-byggeren.dk/fiskegrej/fangstrapport/upload.asp

<html>
<head></head>
<body>
<%
if Request.ServerVariables("REQUEST_METHOD") = "POST" then

  On Error Resume Next
  '  Object creation
  Set upload = Server.CreateObject("aspSmartUpload.SmartUpload")
  'Max størrelse i bytes
  upload.MaxFileSize = 50000
 
  'Upload filerne til memory
  upload.Upload

  For each file In upload.Files
    If not file.IsMissing Then
      filnavn = "/uploads/" & "." & file.FileExt
      file.SaveAs filnavn
    end if
  next

  '  Trap errors
  If Err Then
    Response.Write("<b>Wrong selection : </b>" & Err.description)
  End If

  'Gem filnanvet i databasen
  if filnavn <> "" then
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("fang.mdb")

    SQL = "INSERT INTO skema (Image_Name) VALUES ( '" & filnavn & "')"
    Conn.Execute(SQL)
    Conn.Close
    Set Conn = Nothing
  end if
   
%>
<center> Filen er nu uploaded og gemt </center>
<%
else
%>

<form method="post" action="" ENCTYPE="multipart/form-data">
<input type="file" name="fil1">
<input type="submit" name="Upload" value="Upload">
</form>

</body>
</html>
<% end if %>
Avatar billede ldanielsen Nybegynder
16. februar 2005 - 12:16 #2
Hvad er fejlmeldingen?
Avatar billede webbygger Nybegynder
16. februar 2005 - 17:53 #3
Hej Idanielsen !

Den "skriver" hvad den for besked på ....desværre

Wrong selection : Type mismatch

Du kan prøve den her http://www.web-byggeren.dk/fiskegrej/fangstrapport/upload.asp
Avatar billede ldanielsen Nybegynder
16. februar 2005 - 21:45 #4
filnavn = "/uploads/" & "." & file.FileExt

Vil det ikke give et filnavn der fx. er "/uploads/.gif"?

Først fjern linien
On Error Resume Next, for at få et bud på hvilken linie der giver fejlen.

skriv så
Response.Write (filnavn)
efter linien 
filnavn = "/uploads/" & "." & file.FileExt
- for at se om det ikke er et ugyldigt navn.

Skriv evt
filnavn = "/uploads/test." & file.FileExt
i stedet, for at teste
Avatar billede webbygger Nybegynder
16. februar 2005 - 21:54 #5
Hej

For denne fejl

/uploads.gif
Microsoft VBScript runtime error '800a000d'

Type mismatch: 'SaveAs'

/fiskegrej/fangstrapport/upload.asp, line 20

på dette her:

<%
if Request.ServerVariables("REQUEST_METHOD") = "POST" then


  '  Object creation
  Set upload = Server.CreateObject("aspSmartUpload.SmartUpload")
  'Max størrelse i bytes
  upload.MaxFileSize = 50000
 
  'Upload filerne til memory
  upload.Upload

  For each file In upload.Files
    If not file.IsMissing Then
      filnavn = "/uploads" & "." & file.FileExt
      Response.Write (filnavn)
      file.SaveAs filnavn
    end if
  next

  '  Trap errors
  If Err Then
    Response.Write("<b>Wrong selection : </b>" & Err.description)
  End If

  'Gem filnanvet i databasen
  if filnavn <> "" then
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("fang.mdb")

    SQL = "INSERT INTO skema (Image_Name) VALUES ( '" & filnavn & "')"
    Conn.Execute(SQL)
    Conn.Close
    Set Conn = Nothing
  end if
   
%>
Avatar billede webbygger Nybegynder
16. februar 2005 - 22:40 #6
Hej Idanielsen !

Undskyld men jeg har fundet et andet script som passer til mit formål og det virker "næsten" - det er lavet så man skal tilføje to billeder, men jeg ønsker kun et...kan du klar det ????

<%
'  Variables
'  *********
  Dim mySmartUpload
  Dim file
  Dim intCount
  intCount=0
       
'  Object creation
'  ***************
  Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")

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

'  Select each file
'  ****************
  For each file In mySmartUpload.Files
  '  Only if the file exist
  '  **********************
      If file.IsMissing = false Then
      '  Save the files with his original names in a virtual path of the web server
      '  **************************************************************************
        file.SaveAs(server.mappath("uploads/" & file.FileName))
if CStr(intCount) = "0" then   
        streng = streng & "'" & file.FileName & "', "
else
streng = streng & "'" & file.FileName & "'"
end if
        ' sample with a physical path
        'file.SaveAs("c:\" & file.FileName)

      '  Tæl antal filer...
      '  ******************************************
        intCount = intCount + 1
      End If
  Next

'  Display the number of files which could be uploaded
'  ***************************************************
set rs = Server.CreateObject("ADODB.Connection")
str = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("fang.mdb")
rs.open str
sql = "insert into skema(brugerID, billede) values(" & streng & ")"
set rs = rs.execute(sql)
  Response.Write("<BR>" & mySmartUpload.Files.Count & " files could be uploaded.<BR>")

'  Display the number of files uploaded
'  ************************************
  Response.Write(intCount & " file(s) uploaded.<BR>")
%>
Avatar billede ldanielsen Nybegynder
17. februar 2005 - 10:14 #7
Dette script under støtter et hvilket som helst antal filer, altså også én fil.

Det skulle ikke være nødvendigt at tilpasse det
Avatar billede webbygger Nybegynder
17. februar 2005 - 19:23 #8
Jeg kan kun få det til at virke når jeg uploade 2 billede ellers ikke - har efterhåndende prøvet alt !!! prøv selv her -> http://www.web-byggeren.dk/fiskegrej/fangstrapport/upload6.asp
Avatar billede ldanielsen Nybegynder
18. februar 2005 - 08:31 #9
sql = "insert into skema(brugerID, billede) values(" & streng & ")"

den resulterer i en ugyldig SQL-streng

Lav en Response.Write(sql) i linien lige efter, så vi kan se hvad der er galt
Avatar billede webbygger Nybegynder
18. februar 2005 - 19:11 #10
Hej Idanielsen !

Jeg har fået det til at virke - tror jeg nok ;o)) med det her

<%
On Error Resume Next
'  Variables
'  *********
  Dim mySmartUpload
  Dim file
  Dim intCount
  intCount=1
       



       
'  Object creation
'  ***************
  Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")

'  Only allow txt or htm files
'  ***************************
  mySmartUpload.AllowedFilesList = "gif,jpg,jpeg,bmp,png"

'  Deny physical path
'  *******************
  mySmartUpload.DenyPhysicalPath = True

'  Only allow files smaller than 50000 bytes
'  *****************************************
  mySmartUpload.MaxFileSize = 50000



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

'  Select each file
'  ****************
  For each file In mySmartUpload.Files
  '  Only if the file exist
  '  **********************
      If file.IsMissing = false Then
      '  Save the files with his original names in a virtual path of the web server
      '  **************************************************************************
        file.SaveAs(server.mappath("uploads/" & file.FileName))
if CStr(intCount) = "0" then   
        streng = streng & "'" & file.FileName & "', "
else
streng = streng & "'" & file.FileName & "'"
end if
        ' sample with a physical path
        'file.SaveAs("c:\" & file.FileName)

      '  Tæl antal filer...
      '  ******************************************
        intCount = intCount + 0
      End If
  Next

'  Display the number of files which could be uploaded
'  ***************************************************
set rs = Server.CreateObject("ADODB.Connection")
str = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("fang.mdb")
rs.open str
sql = "insert into skema(art) values(" & streng & ")"
set rs = rs.execute(sql)


'  Display the number of files uploaded
'  ************************************
  Response.Write(" Billedet er uploaded.<BR>")
%>

Nu sidder jeg og roder med, om jeg kan få det til, at giv en fejl meddelelse når billedet ikke er upload eller for stort !!!
Avatar billede ldanielsen Nybegynder
18. februar 2005 - 20:30 #11
Jeg vil igen råde dig til at fjrene linien

On error resume next

Den betyder at du ikke får fejlmeddelserne hvis der sker en fejl. Den skal KUN!! bruges hvis du har lavet noget kode der håndterer hvad der skal ske hvis der er en fejl, og det har du ikke. Som det er nu kan der være alle mulige fejl ude at du ved det.

fjern den, og få det til at køre uden fejl. Med små filer

Derefter prøver du at uploade filer der er større end mySmartUpload.MaxFileSize. Se hvilken fejl der kommer, og især HVORNÅR den kommer, og lave så din fejlhåndtering udfra det.

Jeg vil gerne hjælpe.
Avatar billede webbygger Nybegynder
18. februar 2005 - 21:11 #12
Jeg har vist ikke formuleret mig rigtig !!!
Det overnævnet script VIRKER, men jeg vil godt have tilføje nogen koder (fejl meddelelser) når billedet ikke er upload, for stort eller forkert format!!!

Men hvis du mener jeg skal lave det på din måde, så gør vi det - da det er DIG der er Eksperten her og ikke mig !

Jeg har prøvet at fjernet On error resume next og for denne fejl

aspSmartUpload.File error '80040465'

The path is not a virtual path (Error 1125).

/fiskegrej/fangstrapport/upload.asp, line 44
Avatar billede ldanielsen Nybegynder
19. februar 2005 - 13:22 #13
Præcis!

Du siger at detvirker, men det viser sig faktisk at der var fejl i det.

Hvad er linie 44? Jeg kunne tænke mig at det er linien
file.SaveAs(server.mappath("uploads/" & file.FileName))
- men så er det lidt underligt hvis den faktisk gemmer filen.

Linien
mySmartUpload.DenyPhysicalPath = True
skal måske ændres til
mySmartUpload.DenyPhysicalPath = False
Avatar billede webbygger Nybegynder
19. februar 2005 - 23:01 #14
Hej igen !

Ja nu virker det også uden 'On error resume next' kanon ;o)
Hvordan tilføjer man så Response.Write(" Billedet er for stort") eks. ???
Avatar billede ldanielsen Nybegynder
21. februar 2005 - 00:24 #15
Jeg fandt denne lille stump kode i dokumentationen:


MAX_UPLOAD_SIZE = 100000

if Request.ServerVariables("CONTENT_LENGTH")< MAX_UPLOAD_SIZE then
  Set MyUpLoad = Server.CreateObject("aspSmartUpload.SmartUpload")
  MyUpLoad.Upload
else
  Response.write ("File too large to be uploaded.")
end if

Den kan du vel bruge sådan her (sæt det øverst):

Dim MAX_UPLOAD_SIZE
MAX_UPLOAD_SIZE = 50000
if Request.ServerVariables("CONTENT_LENGTH") > MAX_UPLOAD_SIZE then
  Response.write ("Billedet er for stort.")
  Response.end
end if

Objektet har du ellers en MaxFileSize property, men jeg kan ikke lige finde ud af hvordan man bruger den.

Hvad sker der egentlig hvis du oploader en fil der er for stor som det er nu?
Avatar billede webbygger Nybegynder
06. marts 2005 - 21:33 #16
Tak for hjælpen !
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