Avatar billede carstenandersen Nybegynder
06. oktober 2011 - 06:59 Der er 1 kommentar og
1 løsning

Uploaded billede i database

Hej eksperter

Jeg er ved at finde en funktion til upload af flere billeder, og har fundet http://www.javaatwork.com/java-upload-applet/details.html, som umiddelbart virker rigtig godt. Jeg skal dog også have billedet lagt i vores database + omdøbt filnavnet, og det driller lidt ;-) Hvor kan jeg i nedenstående kode indsætte kaldet til databasen? Hvor kan jeg indsætte lukning af databasen? Hvor kan jeg omdøbe filnavnet?

<%@ Language=VBScript %>

<%Option Explicit%>

<%

Dim base_directory, max_bytes

'The directory where the files will be stored
base_directory = "D:\www1\wwwroot\upload\"

'the maxim upload size
max_bytes = 104857600

If Request.TotalBytes > max_bytes Then
    Response.Status = "500 Max upload size exceeded"
    Response.End
End If

function URLDecode(str)
    dim re
    set re = new RegExp

    str = Replace(str, "+", " ")
   
    re.Pattern = "%([0-9a-fA-F]{2})"
    re.Global = True
    URLDecode = re.Replace(str, GetRef("URLDecodeHex"))
end function

function URLDecodeHex(match, hex_digits, pos, source)
    URLDecodeHex = chr("&H" & hex_digits)
end function

Class FileUploader
    Public  Files
    Private mcolFormElem

    Private Sub Class_Initialize()
        Set Files = Server.CreateObject("Scripting.Dictionary")
        Set mcolFormElem = Server.CreateObject("Scripting.Dictionary")
    End Sub
   
    Private Sub Class_Terminate()
        If IsObject(Files) Then
            Files.RemoveAll()
            Set Files = Nothing
        End If
        If IsObject(mcolFormElem) Then
            mcolFormElem.RemoveAll()
            Set mcolFormElem = Nothing
        End If
    End Sub

    Public Property Get Form(sIndex)
        Form = ""
        If mcolFormElem.Exists(LCase(sIndex)) Then Form = mcolFormElem.Item(LCase(sIndex))
    End Property

    Public Default Sub Upload()
        Dim biData, sInputName
        Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
        Dim nPosFile, nPosBound

        biData = Request.BinaryRead(Request.TotalBytes)
        nPosBegin = 1
        nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
       
        If (nPosEnd-nPosBegin) <= 0 Then Exit Sub
       
        vDataBounds = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
        nDataBoundPos = InstrB(1, biData, vDataBounds)
       
        Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))
           
            nPos = InstrB(nDataBoundPos, biData, CByteString("Content-Disposition"))
            nPos = InstrB(nPos, biData, CByteString("name="))
            nPosBegin = nPos + 6
            nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
            sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            nPosFile = InstrB(nDataBoundPos, biData, CByteString("filename="))
            nPosBound = InstrB(nPosEnd, biData, vDataBounds)
           
            If nPosFile <> 0 And  nPosFile < nPosBound Then
                Dim oUploadFile, sFileName
                Set oUploadFile = New UploadedFile
               
                nPosBegin = nPosFile + 10
                nPosEnd =  InstrB(nPosBegin, biData, CByteString(Chr(34)))
                sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
                oUploadFile.FileName = URLDecode(Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\")))

                nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
                nPosBegin = nPos + 14
                nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
               
                oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
               
                nPosBegin = nPosEnd+4
                nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
                oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
               
                If oUploadFile.FileSize > 0 Then Files.Add LCase(oUploadFile.FileName), oUploadFile
            Else
                nPos = InstrB(nPos, biData, CByteString(Chr(13)))
                nPosBegin = nPos + 4
                nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
                If Not mcolFormElem.Exists(LCase(sInputName)) Then mcolFormElem.Add LCase(sInputName), CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            End If

            nDataBoundPos = InstrB(nDataBoundPos + LenB(vDataBounds), biData, vDataBounds)
        Loop
    End Sub

    'String to byte string conversion
    Private Function CByteString(sString)
        Dim nIndex
        For nIndex = 1 to Len(sString)
          CByteString = CByteString & ChrB(AscB(Mid(sString,nIndex,1)))
        Next
    End Function

    'Byte string to string conversion
    Private Function CWideString(bsString)
        Dim nIndex
        CWideString =""
        For nIndex = 1 to LenB(bsString)
          CWideString = CWideString & Chr(AscB(MidB(bsString,nIndex,1)))
        Next
    End Function
End Class

Function MultiByteToBinary(MultiByte)
  Dim RS, LMultiByte, Binary
  Const adLongVarBinary = 205
  Set RS = CreateObject("ADODB.Recordset")
  LMultiByte = LenB(MultiByte)
  If LMultiByte>0 Then
    RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte
    RS.Open
    RS.AddNew
      RS("mBinary").AppendChunk MultiByte & ChrB(0)
    RS.Update
    Binary = RS("mBinary").GetChunk(LMultiByte)
  End If
  MultiByteToBinary = Binary
End Function

Function SaveBinaryData(FileName, ByteArray)
  Const adTypeBinary = 1
  Const adSaveCreateOverWrite = 2
 
  Dim BinaryStream
  Set BinaryStream = CreateObject("ADODB.Stream")
 
  BinaryStream.Type = adTypeBinary
 
  BinaryStream.Open
  BinaryStream.Write ByteArray
 
  BinaryStream.SaveToFile FileName, adSaveCreateOverWrite
End Function

Class UploadedFile
    Public ContentType
    Public FileName
    Public FileData
   
    Public Property Get FileSize()
        FileSize = LenB(FileData)
    End Property

    Public Sub SaveToDisk(sPath, formDir)
        Dim oFS, oFile
        Dim nIndex
   
        FileName = Replace(FileName, "/", "\")

        If sPath = "" Or FileName = "" Then Exit Sub
        If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"
   
        Set oFS = Server.CreateObject("Scripting.FileSystemObject")
       
        FileName = formDir & "\" & FileName
        Dim folders, numFolders
        folders = Split(FileName, "\")
        numFolders = UBound(folders)
        Dim i, j, folderTmp
        i = 0
       
        While i < numFolders
            j = 1
            folderTmp = sPath & folders(0)
            While j <= i
                folderTmp = folderTmp & "\" & folders(j)
                j = j + 1
            Wend

            If Not oFS.FolderExists(folderTmp) Then oFS.CreateFolder(folderTmp)
            i = i + 1
        Wend

        FileName = sPath & FileName

        SaveBinaryData FileName, MultiByteToBinary(FileData)

    End Sub
End Class

' Create the FileUploader
Dim Up, File

Set Up = New FileUploader

Up.Upload()

' Save files to disk
For Each File in Up.Files.Items

    File.SaveToDisk base_directory, Replace(Up.Form("directory"), "/", "\")
    If Err <> 0 Then
        Response.Status = "500 Internal Server Error"
        Response.Write "Error"
        Exit For
    End If

Next

%>

Håber virkelig, at I kan hjælpe. På forhånd tak.
Avatar billede carstenandersen Nybegynder
06. oktober 2011 - 11:39 #1
Hvis jeg bare fjerner:

<%@ Language=VBScript %>

<%Option Explicit%>

ser det umiddelbart ud til at virke (fandt ideen til dette i en anden tråd - dog kun at slette første linie). Har de 2 sætninger nogen vigtig betydning?
Avatar billede carstenandersen Nybegynder
07. oktober 2011 - 09:49 #2
Lukker ;-)
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
Kurser inden for grundlæggende programmering

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