Avatar billede dj-sejler Praktikant
17. oktober 2003 - 22:12 Der er 32 kommentarer og
1 løsning

upload fil, giv navn udfra accessdatabase, og gem efternavn

Jeg kunne godt tænke mig at lave en side hvor man kan oploade en billedfil... hvis navn bliver ændret til id-feltet i databasen, der samtidig skal huske filens efternavn.

Der ud over skal scriptet kunne sige at en fil er for stor eller at det ikke er en billedfil...

Er der nogen der kan hjælpe... Det skal lige sige at min server har ASPsmartupload
Avatar billede thefatman Nybegynder
17. oktober 2003 - 22:19 #1
Vil du kunne uploade en fil, og gemme fil info i en database?
eller vil du kunne uploade en fil, som så bliver navn givet efter en record i din database?

Hvis sidste løsning:
<%
' Variabler
  Dim mySmartUpload     
' Sætter Object
  Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
' Sætter MAX upload size - 10000bytes - 100kb
  mySmartUpload.MaxFileSize = 100000
' Sætter allowed endelser
  mySmartUpload.AllowedFilesList = "gif,jpg,jpeg" 
' Upload filer
  mySmartUpload.Upload
  mySmartUpload.SaveAs("../../applicants/images/" & < din variable med info fra DB > & "." & mySmartUpload.FileExt)
' Close object
  Set mySmartUpload = nothing
%>
Avatar billede dj-sejler Praktikant
17. oktober 2003 - 22:23 #2
Det skal være sådan at filen bliver navngivet efter "id"-feltet i databasen, samt dens størrelse og fil-type skal blive gemt i databasen...
Avatar billede eagleeye Praktikant
17. oktober 2003 - 22:27 #3
eks på formen hvor billede vælges, her kan du evt også tilføje et javascript som tjekke på om filnanve indeholder jpg,gif eller andre formater du ønsker:

<HTML>
<BODY>
<FORM METHOD="POST" ACTION="gemfil.asp" ENCTYPE="multipart/form-data">
  <INPUT TYPE="FILE" NAME="FILE1" SIZE="50"><BR>
  <INPUT TYPE="SUBMIT" VALUE="Upload">
</FORM>

</BODY>
</HTML>




Her er  kode til gemfil.asp:



<HTML>
<BODY>
<%
  On Error Resume Next

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

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

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

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


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

  for each file in mySmartUpload.files
    If not file.IsMissing Then

    'Connecte til db:
    Set conn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Connection")
    connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb"
    Conn.Open connstr
     
    rs.Open "SELECT * FROM tabelnavn WHERE id=0", conn, 1,3
    rs.AddNew
    rs("filtype") = file.FileExt
    rs("storrelse") = file.Size
    rs.Update
    id = rs("id")

    file.SaveAs "/images/" & id & "." & file.FileExt

    rs.Close
    Conn.Close
    end if
  next
%>
</BODY>
</HTML>
Avatar billede dj-sejler Praktikant
17. oktober 2003 - 22:56 #4
Jeg har et lille problem... min database ligger i roden ../log/db.mdb
Hvordan får jeg lige det skrevet ind filen?
Avatar billede eagleeye Praktikant
17. oktober 2003 - 22:58 #5
så kan du rette og bruge server.mappath:

connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb"

til:

connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Server.Mappath("/log/db.mdb")
Avatar billede dj-sejler Praktikant
17. oktober 2003 - 23:12 #6
jeg kan ikke få det til at virke...
skal man skrive hele stien på databasen fra roden eller i forhold til gemfil'en?
Avatar billede eagleeye Praktikant
17. oktober 2003 - 23:15 #7
Ja hele stien skal stå i Data Sorce som fysisk sti eks: C:\xx\log\db.mdb
man kan så bruge Server.MapPath til at srkive stien relativt, og / angiver root på serveren så /log/db.mdb betyder db.mdb filen ligger i folderen log som ligger i roden af serveren (www delen).
Avatar billede eagleeye Praktikant
17. oktober 2003 - 23:17 #8
Hvilken fejl får du??
Hvis du ikke får en fejl så prøv  at udkommenter denne linje:

  On Error Resume Next
Avatar billede dj-sejler Praktikant
17. oktober 2003 - 23:19 #9
der står ikke noget i databasen og filen har ikke noget fornavn...
Avatar billede eagleeye Praktikant
17. oktober 2003 - 23:24 #10
Laver den en ny post i databasen for hver ny fil?
Avatar billede eagleeye Praktikant
17. oktober 2003 - 23:25 #11
Prøv at flytte lidt rundt på koden :

    rs.Open "SELECT * FROM tabelnavn WHERE id=0", conn, 1,3
    rs.AddNew
    rs("filtype") = file.FileExt
    rs("storrelse") = file.Size
    rs.Update
    id = rs("id")

    file.SaveAs "/images/" & id & "." & file.FileExt

    rs.Close
    Conn.Close



Så det bliver til:

    rs.Open "SELECT * FROM tabelnavn WHERE id=0", conn, 1,3
    rs.AddNew
    rs("filtype") = file.FileExt
    rs.Update
    id = rs("id")

    file.SaveAs "/images/" & id & "." & file.FileExt

    rs("filtype") = file.FileExt
    rs("storrelse") = file.Size
    rs.Update
    rs.Close
    Conn.Close
Avatar billede dj-sejler Praktikant
17. oktober 2003 - 23:25 #12
nej... den gør slet ikke noget med databasen... den ligger bare en fil op som i dette tilfælde hedder: ".jpg"
Avatar billede eagleeye Praktikant
17. oktober 2003 - 23:27 #13
Har du prøvet at fjerne On Error Resume Next ?
Avatar billede dj-sejler Praktikant
17. oktober 2003 - 23:28 #14
nej... jeg skal også lige prøve at bytte om...
Avatar billede dj-sejler Praktikant
17. oktober 2003 - 23:31 #15
Avatar billede eagleeye Praktikant
17. oktober 2003 - 23:34 #16
Ups prøv at rette denne der skal stå Recordset i den linje med Set rs og ikke Connection:

Set rs = Server.CreateObject("ADODB.Connection")

Til:

Set rs = Server.CreateObject("ADODB.Recordset")
Avatar billede dj-sejler Praktikant
17. oktober 2003 - 23:49 #17
Hvis/når jeg får det til at virke... er det vil ikke noget problem at tilføje felter til billed tekst og sådan noget?!

Det kan vel også lade sig gøre at få den til at redirecte til en anden side?!
Avatar billede eagleeye Praktikant
17. oktober 2003 - 23:56 #18
Nej der er ikke noget problem i at havde andre input felter du skal bare huske at man ikke kan bruger
var = Request.Form("navnet")
men man skal bruge nanvet på uload objectet sådan her og det kan først gøres efter kaldet til mySmartUpload.Upload:

var = mySmartUpload.Form("navnet")
Avatar billede dj-sejler Praktikant
18. oktober 2003 - 16:07 #19
jeg kan simpelhen ikke få den til at finde databasen... eller hvad der er galt siden jeg ikke kan kan få den til at give filen et nyt navn...
Avatar billede eagleeye Praktikant
18. oktober 2003 - 16:25 #20
Har du prøvet at fjerne/udkommentere linjen:

On Error Resume Next
Avatar billede dj-sejler Praktikant
18. oktober 2003 - 17:32 #21
ja... så skettet der vidst slet ikke noget... så den står der igen...

Men jeg tror det er fordi jeg ikke kan finde ud af at kommet hen til databasen...

fra roden hvor mappen med databaserne ligger (db) og selve siden (wwwroot)
ligger den database jeg bruger på følgende lokation: wwwroot/bs/db
så jeg har skrevet:
    connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Server.Mappath("/bs/db/database.mdb")
Avatar billede eagleeye Praktikant
18. oktober 2003 - 17:55 #22
Er det samme link som sidst for jeg kan ikke se den melder nogen fejl på siden.
Det er som om den ikke får rigtigt ID ud af databasen, da den gemmer en fil rigtigt nok??
Avatar billede eagleeye Praktikant
18. oktober 2003 - 18:11 #23
Du kan prøve at udskrive filnanvet den førsøger at gemme det som.

Response.Write "/images/" & id & "." & file.FileExt

Lige før denne:
file.SaveAs "/images/" & id & "." & file.FileExt
Avatar billede dj-sejler Praktikant
18. oktober 2003 - 22:19 #24
Den skriver den rigtige sti...
men jeg tror problemet er databasen :(
Avatar billede eagleeye Praktikant
19. oktober 2003 - 11:14 #25
Det er en Access database?
Avatar billede dj-sejler Praktikant
19. oktober 2003 - 19:49 #26
ja... det er en access database...
Avatar billede dj-sejler Praktikant
16. november 2003 - 14:58 #27
Lortet virker ikke...

Gider  du (eagleeye) at kigge her engang:

<-- gemfil.asp -->

<HTML>
<BODY>
<%
On Error Resume Next

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

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

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

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


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

  for each file in mySmartUpload.files
    If not file.IsMissing Then
   
    'Connecte til db:
    Set conn = Server.CreateObject("ADODB.Recordset")
    Set rs = Server.CreateObject("ADODB.Recordset")
    'connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=master.mdb"
    connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Server.Mappath("/../../db/master.mdb")
    'connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Server.Mappath("../../../../db/master.mdb")
    Conn.Open connstr

rs.Open "SELECT * FROM galleri WHERE id=0", conn, 1,3
    rs.AddNew
    rs("type") = file.FileExt
    rs.Update
    id = rs("id")

    Response.Write "/bs/v3/sider/galleri/" & id & "." & file.FileExt

    file.SaveAs "/bs/v3/sider/galleri/" & id & "." & file.FileExt

    rs("type") = file.FileExt
    rs("stoerrelse") = file.Size
    rs.Update
    rs.Close
    Conn.Close
    end if
  next
%>
</BODY>
</HTML>


<-- upload -->

<HTML>
<BODY>
<FORM METHOD="POST" ACTION="gemfil.asp" ENCTYPE="multipart/form-data">
  <INPUT TYPE="FILE" NAME="FILE1" SIZE="50"><BR>
  <INPUT TYPE="SUBMIT" VALUE="Upload">
</FORM>

</BODY>
</HTML>

De ligger i det samme bibliotek: wwwroot/bs/v3/sider
databasen (master.mdb) ligger: wwwroot/bs/db

Som sagt er der ingen problemer med at uploade filen... det er databasen der er prolemet
Avatar billede eagleeye Praktikant
16. november 2003 - 17:25 #28
Først denne linje:
Set conn = Server.CreateObject("ADODB.Recordset")

Skal vist være en Connection og ikke et recordset.:
Set conn = Server.CreateObject("ADODB.Connection")

---

Denne:
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Server.Mappath("/../../db/master.mdb")

Tror jeg fejler da "/" er root og man kan normalt ikke bruge ../ og tilgå en foldr som er før root så prøv at skrive den fysiske sti til folderen databasen ligger i.


Når du tester kan du så ikke prøve at slå denne linje fra ved at udkommentere den, den gør nemlig at hvis der er fejl på siden vil de ikke blive vist.

On Error Resume Next
Avatar billede dj-sejler Praktikant
16. november 2003 - 17:35 #29
det med databasen...

connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Server.Mappath("wwwroot/bs/db/master.mdb")

Er det det du mener?
Avatar billede eagleeye Praktikant
16. november 2003 - 17:37 #30
Ja og "/" svare til wwwroot så det skal være:

connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Server.Mappath("/bs/db/master.mdb")
Avatar billede dj-sejler Praktikant
16. november 2003 - 17:53 #31
jubbiiiiiiii.... nu virker det langt om længe...
Avatar billede dj-sejler Praktikant
16. november 2003 - 18:09 #32
du må jo hellere svare så ;)
Avatar billede eagleeye Praktikant
16. november 2003 - 18:15 #33
;) det lyder godt det kom til at virke.
Når ja, her et svar.
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