Avatar billede pingo Nybegynder
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!
Avatar billede moykal Nybegynder
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
Avatar billede jennemaan Nybegynder
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
%>

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester