webForumDet fria alternativet
Logga in / Bli medlem

Upload form

ASP

22 svar · 693 visningar · startad av His Divine Shadow

Medlem sedan sep. 20004 079 inlägg
Trådstart#1

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?

Medlem sedan okt. 20005 273 inlägg
#2

sök på upload.... eller dundas ....typ ;)

Medlem sedan aug. 20012 349 inlägg
#3

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

Medlem sedan sep. 20004 079 inlägg
#4

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
%>
Medlem sedan dec. 200012 464 inlägg
#5

Du måste använda uploadrequest i stället.

Medlem sedan sep. 20004 079 inlägg
#6

Ä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...

Medlem sedan dec. 19998 577 inlägg
#7

Test: uploadrequest.item

Medlem sedan sep. 20004 079 inlägg
#8

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?

Medlem sedan sep. 20004 079 inlägg
#9

Förresten...

När jag har ENCTYPE="multipart/form-data" i form taggen så blir alla fält blanka...

Medlem sedan aug. 2001150 inlägg
#10

Du kommer säkert långt om du byter kod hela tiden pga att den inte funkar.

Medlem sedan dec. 19998 577 inlägg
#11

ENCTYPE="multipart/form-data" behöver du för att kunna ladda upp filer.

Medlem sedan sep. 20004 079 inlägg
#12

"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.

Medlem sedan sep. 20004 079 inlägg
#13

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...

Medlem sedan dec. 19998 577 inlägg
#14

Det var ju det LarsG sa ovan: "Du måste använda uploadrequest i stället."

En liten missuppfattning kanske... ;)

Medlem sedan sep. 20004 079 inlägg
#15

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...

Medlem sedan mars 20002 836 inlägg
#16

Varför då???

cya,
PatrikB

Medlem sedan sep. 20004 079 inlägg
#17

Jag vet inte jag gissar bara, dundas går ju inte igång fastän jag har det installerat...

Medlem sedan dec. 19996 721 inlägg
#18

Du får visa lite kod från din dundas-variant

Medlem sedan sep. 20004 079 inlägg
#19

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
Medlem sedan sep. 20004 079 inlägg
#20

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 
%>
931 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
483 ms — hämta tråd, inlägg och bilagor (db)
445 ms — ändringar (db)