17. november 2000 - 15:47
Der er
1 kommentar og
1 løsning
Brug af AppendChunk i forbindelse med BLOB.
Hejsa.
Jeg sidder og skal loade et billede op i en database - og det vil bare ikke virke - hvad gør jeg forkert?
Her er min kode (Image.Image) er den binære data jeg får fra mit billede objekt.
Set RS = Server.CreateObject(\"ADODB.recordset\")
RS.Open \"tblGenerated\", Conn, adOpenDynamic, adLockOptimistic
RS.AddNew
RS(\"Image\").AppendChunk Image.Image
Der er 200 point!
02. december 2000 - 08:57
#1
Jeg er ikke den store ADO-ekspert, men har dog fået BLOB-skrivning til at virke med AppendChunk... så vidt jeg kan se, mangler du en RS.Update
16. januar 2001 - 13:51
#2
Hej pingo,
Her er 3 asp-filer jeg bruger til henholdsvis upload og visning af billeder fra en sqlserver.
Default.asp indholder upload-formen
Showdata.asp parser og uploader POST\'en fra Default.asp
ViewImage.asp viser billedet.
Viewimage bruges således: <img src=\"VievImage.asp?ID=4711\"> (hvor 4711 er id\'et på det billede du vil vise.
Håber at du får det til at virke :)
/Jennemaan
______Default.asp_____(selve upload formen)
<%@ Language=VBScript %>
<HTML><HEAD><TITLE>Upload</TITLE></HEAD><BODY>
<FORM ACTION=\"showdata.asp?ID=<%=request.querystring(\"DocumentID\")%>\" METHOD=\"POST\" ENCTYPE=\"multipart/form-data\" id=form1 name=form1>
<INPUT TYPE=FILE NAME=\"UploadFormName\">
<INPUT TYPE=\"SUBMIT\" id=SUBMIT1 name=SUBMIT1>
</FORM>
</BODY>
</HTML>
______ShowData.asp________(parser post\'en og gemmer den i imgdb)
<%@ Language=VBScript%>
<HTML>
<BODY>
<%
Const BLOCKSIZE = 32768
set conn=createobject(\"adodb.connection\")
set rst=createobject(\"adodb.recordset\")
conn.Open \"imgDB\"
\'~~~~~ BYTE COUNT OF RAW FORM DATA ~~~~~~~~~~~~
dim binArray
varByteCount = Request.TotalBytes
\'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\'~~~~~ PLACE RAW DATA INTO BYTE ARRAY ~~~~~~~~~\'
ReDim binArray(varByteCount)
binArray = Request.BinaryRead(varByteCount)
\' \'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\' \'~~~~~ PARSE HEADER DATA OF FIRST ELEMENT FROM BYTE ARRAY ~~~~~~~~~~~~~~~~~~~~~~
intCount = 1 \'binArray is base zero
while Right(strHeadData, 4) <> chr(13) & chr(10) & chr(13) & chr(10)
strHeadData = strHeadData & Chr(ascb(midB(binArray,intCount,1)))
intCount = intCount + 1
wend
\'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\'~~~~~ PARSE FILE NAME ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\'#1 Find the beginning of the file tag name (UploadFormName)
intFileTagStart = InStr(strHeadData, \"UploadFormName\")
\'#2 Find the beginning of the FilePath (\'filename=\' plus 10 chars)
intPathNameStart = InStr(intFileTagStart, strHeadData, \"filename=\") + 10
intContentTypeStart=InStr(intFileTagStart,strHeadData,\"Content-Type:\")+13
intContentTypeEnd = InStr(intContentTypeStart, strHeadData, vbCrLf)
\'#3 Find the quote at the end of the file name sent by the user
intFileNameEnd = InStr(intFileTagStart, strHeadData, vbCrLf) - 1
\' Check if no file name was sent (exit sub for this example)
\'#4 Parse the path name
strPathName = Mid(strHeadData, intPathNameStart, intFileNameEnd - intPathNameStart)
strContentType=Mid(strHeadData, intContentTypeStart, intContentTypeEnd - intContentTypeStart)
\'#5 Find the starting position the file name
For intCount = intFileNameEnd To intPathNameStart Step -1
If Mid(strHeadData, intCount, 1) = \"\\\" Then
intFileNameStart = intCount + 1
Exit For
End If
Next
\'#6 Now parse the file name
strFileName = Mid(strHeadData, intFileNameStart, intFileNameEnd - intFileNameStart)
\'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\'~~~~~ PARSE DELIMETER FROM HEADER ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
strDelimeter = Left(strHeadData, InStr(strHeadData, vbCrLf) - 1)
\'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\'~~~~~ START AND END OF THE UPLOAD FILE DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lngFileDataStart = InStr(intFileTagStart, strHeadData, vbCrLf & vbCrLf) + 4
lngFileDataEnd = CLng(varByteCount) - (Len(strDelimeter) + 6)
\'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\'~~~~~ SAVE THE DATA TO DB~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rst.Open \"images\",conn,1,3,2
rst.AddNew
rst.Fields(\"ContentType\")=strContentType
rst.Fields(\"Size\")=lngFileDataEnd-lngFileDataStart
rst.Fields(\"Filename\")=strFilename
For lngCount = lngFileDataStart To lngFileDataEnd step BLOCKSIZE
rst.Fields(\"ImageData\").AppendChunk midb(binArray,lngCount,BLOCKSIZE)
Next
rst.Update
rst.close
rst.open \"Select max(ImageID) as ImageID from images\",conn,1,3
lngID=rst.Fields(\"ImageID\")
Response.Write \"ID=\" & lngID & \"<br>\"
rst.Close
conn.Close
set rst=nothing
set conn=nothing
response.write strfilename & \"<br>\"
response.write lngFileDataEnd-lngFileDataStart & \" bytes<br>\"
response.write \"Content Type: \" & strContentType & \" <br>\"
Response.Write \"<a href=\"\"ViewImage.asp?ID=\" & lngID & chr(34) & \">View</a>\"
\'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%>
</BODY>
</HTML>
_______ViewImage.asp____ (viser billede fra db\'en)
<%@ Language=VBScript %>
<%option explicit
Response.Expires=-1
dim ImageID
dim Image
dim Connection
dim Result
dim sql
ImageID = request.querystring(\"ID\")
if ImageID <> \"\" then
set Connection = server.createobject(\"ADODB.Connection\")
Connection.Open \"ImgDB\"
set Result = server.createobject(\"ADODB.Recordset\")
sql = \"SELECT * FROM Images WHERE ImageID=\" & ImageID
Result.Open sql, Connection, 0
if not (Result.eof and Result.bof) then
Image = Result.Fields(\"ImageData\").GetChunk(10240000)
Response.ContentType = Result.Fields(\"ContentType\")
Response.BinaryWrite Image
else
Response.Write \"ID \'\" & ImageID & \"\' not found in DB.\"
end if
Result.Close
Connection.Close
Set Result=nothing
Set Connection=nothing
else
Response.Write \"ID is blank \"
end if
Response.End
%>