sök på upload.... eller dundas ....typ
I ett formulär som jag nu håller på och utvecklar vill jag att man ska kunna ladda upp en bild.
Hur gör jag detta, kan man ladda direkt in i en databas? Är det rekomenderat?
22 svar · 693 visningar · startad av His Divine Shadow
I ett formulär som jag nu håller på och utvecklar vill jag att man ska kunna ladda upp en bild.
Hur gör jag detta, kan man ladda direkt in i en databas? Är det rekomenderat?
sök på upload.... eller dundas ....typ
Det här är en väldigt vanlig fråga.
Testa att söka så får du upp hur mycket träffar som helst.
http://cgi.webforum.nu/wf/Forum11/HTML/000626.html
tex.
mvh mrblonde
OK jag får denna felkod:
Request object error 'ASP 0207 : 80004005'
Cannot use Request.Form
/katalog/swe/adduser.asp, line 52
Cannot use Request.Form collection after calling BinaryRead.
såhär ser koden ut:
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\data\WebData\katalog.mdb"
SQL = "SELECT * FROM Kat"
%>
<!-- #INCLUDE FILE = "../adovbs.inc" -->
<%
' Author Philippe Collignon
' Email PhCollignon@email.com
Response.Expires=0
Response.Buffer = TRUE
Response.Clear
'Response.BinaryWrite(Request.BinaryRead(Request.TotalBytes))
byteCount = Request.TotalBytes
'Response.BinaryWrite(Request.BinaryRead(varByteCount))
RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin
'email = UploadRequest.Item("email").Item("Value")
contentType = UploadRequest.Item("blob").Item("ContentType")
filepathname = UploadRequest.Item("blob").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item("blob").Item("Value")
'Create FileSytemObject Component
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
'Create and Write to a File
pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14
' Set MyFile = ScriptObject.CreateTextFile(Left(Server.mappath(Request.ServerVariables("PATH_INFO")),pathEnd)&filename)
Set MyFile = ScriptObject.CreateTextFile(Server.mappath("/katalog/images/"&filename))
response.write(Server.mappath(filename))
For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next
MyFile.Close
%>
<!--#include file="upload.asp"-->
<%
'create variable to hold email address
DIM Namn
namn = Request.Form("Namn")
DIM Epost
Epost = Request.Form("Epost")
DIM Naradress
Naradress = Request.Form("Naradress")
DIM postnr
postnr = Request.Form("postnr")
DIM ort
ort = Request.Form("ort")
DIM Tel
Tel = Request.Form("Tel")
DIM fax
fax = Request.Form("Fax")
DIM www
www = Request.Form("www")
DIM AmnesomrAde
AmnesomrAde = Request.Form("Amnesomrade")
DIM Ovrigt_swe
Ovrigt_swe = Request.Form("Ovrigt_swe")
DIM Ovrigt_fin
Ovrigt_fin = Request.Form("Ovrigt_fin")
DIM password
password = Request.Form("password")
Dim objRec
Set objRec = Server.CreateObject("ADODB.Recordset")
objRec.Open "kat", connect, adOpenStatic , _
adLockOptimistic, adCmdTable
Function Free(txt)
If IsEmpty(txt) OR IsNull(txt) Then Exit Function
txt = Server.HTMLEncode(txt)
txt = Replace(Trim(txt), vbCrLf, "<br>")
Free = txt
End Function
objRec("ovrigt_swe") = Free(Ovrigt_swe)
objRec("ovrigt_fin") = Free(Ovrigt_fin)
'create a new record
objRec.AddNew
'set the field equal to the variable
objRec("Namn") = Namn
objRec("Epost") = Epost
objRec("Naradress") = Naradress
objRec("Postnr") = Postnr
objRec("Ort") = Ort
objRec("Tel") = Tel
objRec("Fax") = Fax
objRec("www") = www
objRec("amnesomrade") = Amnesomrade
objRec("ovrigt_swe") = Ovrigt_swe
objRec("ovrigt_fin") = Ovrigt_fin
objRec("Password") = Password
'update the database with the new record
objRec.Update
'close the database
objRec.Close
Set objRec = Nothing
'un-comment this line to point to your desired confirm page
Response.Redirect("http://www.uniimport.fi/katalog/swe/kundLista.asp?sort=namn")
'tell the user their account is added
' Response.Write("User Added")
%>
Och filen upload.asp:
<%
' Author Philippe Collignon
' Email PhCollignon@email.com
Sub BuildUploadRequest(RequestBin)
'Get the boundary
PosBeg = 1
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
boundaryPos = InstrB(1,RequestBin,boundary)
'Get all data inside the boundaries
Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
'Members variable of objects are put in a dictionary object
Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")
'Get an object name
Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))
Pos = InstrB(Pos,RequestBin,getByteString("name="))
PosBeg = Pos+6
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))
PosBound = InstrB(PosEnd,RequestBin,boundary)
'Test if object is of file type
If PosFile<>0 AND (PosFile<PosBound) Then
'Get Filename, content-type and content of file
PosBeg = PosFile + 10
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
'Add filename to dictionary object
UploadControl.Add "FileName", FileName
Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
PosBeg = Pos+14
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
'Add content-type to dictionary object
ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "ContentType",ContentType
'Get content of object
PosBeg = PosEnd+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
Else
'Get content of object
Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
PosBeg = Pos+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
End If
'Add content to dictionary object
UploadControl.Add "Value" , Value
'Add dictionary object to main dictionary
UploadRequest.Add name, UploadControl
'Loop to next object
BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
Loop
End Sub
'String to byte string conversion
Function getByteString(StringStr)
For i = 1 to Len(StringStr)
char = Mid(StringStr,i,1)
getByteString = getByteString & chrB(AscB(char))
Next
End Function
'Byte string to string conversion
Function getString(StringBin)
getString =""
For intCount = 1 to LenB(StringBin)
getString = getString & chr(AscB(MidB(StringBin,intCount,1)))
Next
End Function
%>
Du måste använda uploadrequest i stället.
Äsch, jag fattar inte alls vad du menar med detta...
använda upload request istället för vad, var?
Upload request används ju visst på några ställen, då jag bytte ut request.form mot uploadrequest.form gick det inte heller...
Test: uploadrequest.item
hmmm... tja jag har redan skippat dendär lösningen, jag prövade dundas upload control istället.
men det ger mig detta:
Microsoft VBScript runtime error '800a01b6'
Object doesn't support this property or method: 'objUpload'
Kan det vara nått fel med installationen?
Borde servern startas om kanske?
Du kommer säkert långt om du byter kod hela tiden pga att den inte funkar.
ENCTYPE="multipart/form-data" behöver du för att kunna ladda upp filer.
"Du kommer säkert långt om du byter kod hela tiden pga att den inte funkar"
Tja, dundas verkade bättre, dessutom tror jag den förra kodsnutten hade kompabilitets problem med den vanliga.
"ENCTYPE="multipart/form-data" behöver du för att kunna ladda upp filer."
Jo jag vet, det konstiga är bara att dom vanliga textfälten blir blanka i databasen om jag pröva att skicka utan fil.
Aja nu fattar jag:
Enligt dundas dokumentation.
Man kan inte använda ASP Request.Form om man har "Multipart/Form-Data" i formuläret.
Man ska visst använda "objUpload.Form"
Syndbara då att Dundas inte vill funka...
Det var ju det LarsG sa ovan: "Du måste använda uploadrequest i stället."
En liten missuppfattning kanske...
kanske det, men bara jag kunde se varför dundas inte vill funka, säg nu inte att servern måste startas om efter installation...
Jag vet inte jag gissar bara, dundas går ju inte igång fastän jag har det installerat...
Du får visa lite kod från din dundas-variant
Den är ganska simpel.
objUpload = Server.CreateObject("Dundas.Upload.2")
objUpload.Save "e:\inetpub\wwwroot\unishop\katalog\images\"
strName = objUpload.Form("blob")
strSize = objUpload.Files(0).Size
objUpload = Nothing
Jag har fått det här att funka nu men några små konstiga problem...
t.ex. om ett fält är tomt i en annan "rad" så fylls det med innehållet från det som just nu läggs till i databasen, här är en bild så kanske ni förstår: http://www.uniimport.fi/mine/konstigt.gif
Den nya koden:
<%@ Language=VBScript%>
<%
' Object creation
' ***************
Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
' Upload
' ******
mySmartUpload.Upload
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\data\WebData\katalog.mdb"
SQL = "SELECT * FROM Kat"
%>
<!-- #INCLUDE FILE = "../adovbs.inc" -->
<%
'create variable to hold email address
DIM Namn
namn = mySmartUpload.Form("Namn")
DIM Epost
Epost = mySmartUpload.Form("Epost")
DIM Naradress
Naradress = mySmartUpload.Form("Naradress")
DIM postnr
postnr = mySmartUpload.Form("postnr")
DIM ort
ort = mySmartUpload.Form("ort")
DIM Tel
Tel = mySmartUpload.Form("Tel")
DIM fax
fax = mySmartUpload.Form("Fax")
DIM www
www = mySmartUpload.Form("www")
DIM AmnesomrAde
AmnesomrAde = mySmartUpload.Form("Amnesomrade")
DIM Ovrigt_swe
Ovrigt_swe = mySmartUpload.Form("Ovrigt_swe")
DIM Ovrigt_fin
Ovrigt_fin = mySmartUpload.Form("Ovrigt_fin")
DIM password
password = mySmartUpload.Form("password")
Dim objRec
Set objRec = Server.CreateObject("ADODB.Recordset")
objRec.Open "kat", connect, adOpenStatic , _
adLockOptimistic, adCmdTable
Function Free(txt)
If IsEmpty(txt) OR IsNull(txt) Then Exit Function
txt = Server.HTMLEncode(txt)
txt = Replace(Trim(txt), vbCrLf, "<br>")
Free = txt
End Function
objRec("ovrigt_swe") = Free(Ovrigt_swe)
objRec("ovrigt_fin") = Free(Ovrigt_fin)
' create a new record
objRec.AddNew
'set the field equal to the variable
objRec("Namn") = Namn
objRec("Epost") = Epost
objRec("Naradress") = Naradress
objRec("Postnr") = Postnr
objRec("Ort") = Ort
objRec("Tel") = Tel
objRec("Fax") = Fax
objRec("www") = www
objRec("amnesomrade") = Amnesomrade
objRec("ovrigt_swe") = Ovrigt_swe
objRec("ovrigt_fin") = Ovrigt_fin
objRec("Password") = Password
'update the database with the new record
'close the database
' objRec.Close
' Set objRec = Nothing
' Variables
' *********
Dim mySmartUpload
Dim file
Dim intCount
intCount=0
' Connect to the DB
' *****************
' Set oConn = Server.CreateObject("ADODB.Connection")
' oConn.Open "DBQ=C:\data\WebData\katalog.mdb;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
' Open a recordset
' ****************
' strSQL = "SELECT FILENAME,FILE FROM Kat"
' Set objRec = Server.CreateObject("ADODB.recordset")
' Set objRec.ActiveConnection = Connect
' objRec.Source = strSQL
' objRec.LockType = 3
' objRec.Open
' Select each file
' ****************
For each file In mySmartUpload.Files
' Only if the file exist
' **********************
If not file.IsMissing Then
' Add the current file in a DB field
' **********************************
file.FileToField objRec.Fields("FILE")
objRec("FILENAME") = file.FileName
'objRec.Update
intCount = intCount + 1
End If
Next
' Display the number of files uploaded
' ************************************
Response.Write(intCount & " file(s) uploaded.<BR>")
' Destruction
' ***********
objRec.Close
Connect.Close
Set objRec = Nothing
Set Connect = Nothing
%>