Forum > ASP > Generella frågor
Det är så att jag vill skapa ett script som gör att jag kan ladda upp bilder som sparas i en mapp, och även att det sparas namn och info i en databas. Jag har sökt på olika forum och även kollat på aspupload.com för guider men jag har inte lyckats att skapa ett enkelt uppladnings script..
Jag har kommit så lång att jag kan ladda upp bilder i en mapp. Men inte spara i databas.
<%
If Request.Querystring("do") = "ladda_upp" ThenSet Upload = Server.CreateObject("Persits.Upload.1")
Upload.OverwriteFiles = False
On Error Resume Next
Upload.Save(Server.MapPath("bilder"))
response.write "Bilden är uppladdad"
end if
%>
Hur ska jag göra för att spara i databasen?
| Skriv uthttp://www.aspupload.com/Manual.htm
For Each File in Upload.Files
'File.Name
'Gör din INSERT INTO SQL fråga med File.Name
Next
Alltså så det blir såhär:
<%
If Request.Querystring("do") = "ladda_upp" Then
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.OverwriteFiles = False
On Error Resume Next
Upload.Save(Server.MapPath("bilder"))
For Each File in Upload.Files
File.ToDatabase "Driver={Microsoft Access Driver (*.mdb)};DBQ=bilder.mdb")
SQL = "INSERT INTO bilder(fil, namn) values('" & File.Name & "','"& Request.Form("namn") &"')"
next
%>
Men var menar du att jag ska göra där det står 'File.Name?
For Each file in Upload.files
Översätt det till Svenska:
För varje File i Upload.Files
Dvs du får en array (Dvs d skulle mycket väl kunna göra så att du laddar upp fler än en fil).
file.Name är ett objekt i Files där den har en Property vid namn "Name" bland annat. Vilket du kan använda för att få ut filens namn.
Okej.. Hur ska jag göra för att skapa en array? Jag är verkligen inte så bra på detta så jag skulle uppskatta om du visade med kod hur man gör.
Varför ska du skapa en array? Upload.Files är en array av filer redan. For satsen loopar ut den till dig redan.
Din kod är helt fel när det gäller att spara ner den i SQL:en
Har inte läst manualen för ASP upload och har aldrig använd den heller men jag tror inte dom har ett inbyggt Connection objekt i den.
Du måste ha ett Connection objekt mot din databas
Du vet ju själv var filerna ligger på din server om du laddar upp
det ända du inte vet är filnamnet på filen. därför skrev jag att du ska använda file.Name i din for sats och köra en Insert till databasen med egentligen endast filnamnet då du vet var Path vägen till filen är på servern redan. om du laddar upp alla filer i en mapp som heter upload så vet du att den ligger: http://bob.com/upload/ då räcker det att ladda upp filnamnet och veta vad den har för filnamn.
Okej, vad är fel med min kod då? Vad ska jag göra för att den ska fungera?
<%
If Request.Querystring("do") = "ladda_upp" Then
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.OverwriteFiles = False
On Error Resume Next
Upload.Save(Server.MapPath("bilder"))
For Each File in Upload.Files
File.ToDatabase "Driver={Microsoft Access Driver (*.mdb)};DBQ=bilder.mdb")
SQL = "INSERT INTO bilder(fil, namn) values('" & File.Name & "','"& Request.Form("namn") &"')"
next
%>
Som jag redigerade nyss:
Din kod är helt fel när det gäller att spara ner den i SQL:en
Har inte läst manualen för ASP upload och har aldrig använd den heller men jag tror inte dom har ett inbyggt Connection objekt i den.
Du måste ha ett Connection objekt mot din databas
Du vet ju själv var filerna ligger på din server om du laddar upp
det ända du inte vet är filnamnet på filen. därför skrev jag att du ska använda file.Name i din for sats och köra en Insert till databasen med egentligen endast filnamnet då du vet var Path vägen till filen är på servern redan. om du laddar upp alla filer i en mapp som heter upload så vet du att den ligger: http://bob.com/upload/ då räcker det att ladda upp filnamnet och veta vad den har för filnamn.
Vad jag menar med file.Name .... läs länken jag postade till dig. Och jag vet inte hur jag kan förklara det på ett annat sätt.. Det är ett objekt som finns i files (ditt objekt för aspUpload). Läs deras manual om du vill veta mer om vad för objekt som finns i ASP Upload.
Läste snabbt nu.. tydligen så har dom ett Connection objekt. Och dom har ett perfekt exempel på deras sida:
<HTML>
<BODY>
<%
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.Save "c:\upload"
On Error Resume Next
For Each File in Upload.Files
File.ToDatabase "DSN=MyImages;UID=sa;PWD=xxx;", _
"insert into MyImages(filename, Image1) values('" & File.Path & "', ?)"
if Err <> 0 Then
Response.Write "Error saving the file: " & Err.Description Else
File.Delete
Response.Write "Success!" End If Next
%>
</BODY>
</HTML>
Jag testade det där och skrev dit connect och insert som jag tror att det ska vara..
<% Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.Save "../bilder"
On Error Resume Next
For Each File in Upload.Files
Connect = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("bilder.mdb")
SQL = "insert into bilder(fil) values('" & File.ExtractFileName & "')"
if Err <> 0 Then
Response.Write "Error saving the file: " & Err.Description Else
File.Delete
Response.Write "Success!" End If Next
%>
Men får fortfarande 500 Internal Server Error
Vad får du för felmeddelande då?
+ du saknar radbrytning på End if och Next
Såg inte det där med End if och next, Det har jag fixat. Ingen skillnad
Jag får detta felmeddelnde:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator to inform of the time the error occurred and of anything you might have done that may have caused the error.
More information about this error may be available in the server error log
Du har nog inte skrivrättigheter till din databas och eller till mappen du laddar upp filerna till.
Men grejjen är den att jag inte ens försöker att ladda upp en fil.. Så fort jag går in på sidan kommer det meddelandet upp..
hur ser hela din fil ut då?
<form method="post" enctype="multipart/form-data" action="?do=ladda_upp">
<input type="file" name="file"><br>
<input type="submit" value="Skicka filen">
</form>
<%
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.Save "../bilder"
On Error Resume Next
For Each File in Upload.Files
Connect = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("bilder.mdb")
SQL = "insert into bilder(fil) values('" & File.ExtractFileName & "')"
if Err <> 0 Then
Response.Write "Error saving the file: & Err.Description &"
Else
File.Delete
Response.Write "Success!"
End If
Next
%>