webForumDet fria alternativet

bild upload

7 svar · 257 visningar · startad av aleborg

aleborgMedlem sedan jan. 20013 341 inlägg
#1

Jag provade fredriks bild upload script: http://cgi.webforum.nu/wf/Forum11/HTML/000626.html
det funkar jättebra men...

kan man på nått sätt koppla den uppladdade bilden med en post i databasen? samtidigt som man laddar upp helst :)

hakangusMedlem sedan feb. 200144 inlägg
#2

Kolla in http://mikrodatorn.idg.se/webbmastern/md9904. Där har du ett mycket bra svar.

/Håkan

JanspeedMedlem sedan jan. 2001510 inlägg
#3

Kolla in http://mikrodatorn.idg.se/webbmastern/md9904. Där har du ett mycket bra svar.

Du får inte ha ha med punkten sådär i URL:en jag trodde ju att du glömt filändelsen. Väldigt irriterande då jag prövade hela mitt register av filändelser innan jag kom på att punkten inte skulle vara med alls.

Smarta jag. :e

[Redigerat av Janspeed den 13 feb 2001]

aleborgMedlem sedan jan. 20013 341 inlägg
#4

Den baserar sig på en upload komponent, så det blir lite svårt att lista ut för mig som är nybörjare hur man ska få in det i fredriks script!

Några mer förslag?

ToonsterMedlem sedan feb. 20001 590 inlägg
#5

Tyvärr blir det mycket kod, men jag drar det "teoretiskt"

Jag utgår från att du har ett formulär med möjlighet att lägga in en bild/fil

Steg 1. Ta emot formuläret.

Steg 2. Spara formulärdata i en post (som "vanligt") i databasen.
Steg 3. Öppna databasen igen, sök efter det högsta id numret( eller den unika nyckeln)
Steg 4. Spara bilden, använd det unika id numret för att namnge bilden.
Steg 5. Spara bildens namn i databasen.

Nu har du en bild med ett unikt namn, och bildens namn sparat i databasen. nu kan du när som helst radera en post, kolla bildens namn, och radera bilden.
Mao. du behöver inte tänka på att namnge bilden med unika namn när du skickar upp den, det sköter systemet.

/T

------------------
"Den som väntar på någon som gått behöver inte vänta längre..."

aleborgMedlem sedan jan. 20013 341 inlägg
#6

hmmm...eeehhh...just det ja :)

Min befintliga kod som tar emot datan ser ut så här:

<%
dim Conn
set rs= Server.CreateObject("ADODB.Recordset")
SQL= "SELECT * FROM Nyheter WHERE 1=2"
rs.Open SQL,Conn,1,2
rs.AddNew
rs("Nyhet")=Request.Form("rubr")
rs("Datum")=Request.Form("date")
rs("Beskr")=Request.Form("beskr")
rs("Bild")=Request.Form("pic")
rs("Artnr")=Request.Form("artnr")
rs.Update
rs.Close
%>

Fredriks kod ser ut så här:

outputfile.asp:

<%
' 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("test/"&filename))
response.write(Server.mappath(filename)) 

 For i = 1 to LenB(value)
	 MyFile.Write chr(AscB(MidB(value,i,1)))
 Next
 
 MyFile.Close
%>
<b>Uploaded file : </b><%=filename%><BR>
<img src="test/<%=filename%>">
<!--#include file="upload.asp"-->

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

hur 17 gör man?
Hängde med på Toonsters resonemang, men att sätta det i script är lite annorlunda!

brwMedlem sedan juli 2000619 inlägg
#7

Går det med Mikrodatorns script på något sätt att få reda på storleken dvs. bredd och höjd på bilden... inte bara filstorleken?

------------------
Ingenting är omöjligt, bara en utmaning.

ToonsterMedlem sedan feb. 20001 590 inlägg
#8

Om det verkar krångligt, så ta det i små steg.

Försök först få bilden uppladdad, och spara bildens namn (direkt från textfältet) i databasen.

När du sedan får det att funka, kan du börja med att "laborera med bildnamnet"

Som du märker blir det en massa kod, men jag ska försöka "klistra in" något under kvällen...

/T

------------------
"Den som väntar på någon som gått behöver inte vänta längre..."

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)