Avatar billede jonas-i Nybegynder
04. september 2002 - 16:20 Der er 2 kommentarer og
1 løsning

Upload

Hey!
Jeg har følgende upload funktion

<%

  Class Loader
    Private dict
   
    Private Sub Class_Initialize
      Set dict = Server.CreateObject("Scripting.Dictionary")
    End Sub
   
    Private Sub Class_Terminate
      If IsObject(intDict) Then
        intDict.RemoveAll
        Set intDict = Nothing
      End If
      If IsObject(dict) Then
        dict.RemoveAll
        Set dict = Nothing
      End If
    End Sub

    Public Property Get Count
      Count = dict.Count
    End Property

    Public Sub Initialize
      If Request.TotalBytes > 0 Then
        Dim binData
          binData = Request.BinaryRead(Request.TotalBytes)
          getData binData
      End If
    End Sub
   
    Public Function getFileData(name)
      If dict.Exists(name) Then
        getFileData = dict(name).Item("Value")
        Else
        getFileData = ""
      End If
    End Function

    Public Function getValue(name)
      Dim gv
      If dict.Exists(name) Then
        gv = CStr(dict(name).Item("Value"))
       
        gv = Left(gv,Len(gv)-2)
        getValue = gv
      Else
        getValue = ""
      End If
    End Function
   
    Public Function saveToFile(name, path)
      If dict.Exists(name) Then
        Dim temp
          temp = dict(name).Item("Value")
        Dim fso
          Set fso = Server.CreateObject("Scripting.FileSystemObject")
        Dim file
          Set file = fso.CreateTextFile(path)
            For tPoint = 1 to LenB(temp)
                file.Write Chr(AscB(MidB(temp,tPoint,1)))
            Next
            file.Close
          saveToFile = True
      Else
          saveToFile = False
      End If
    End Function
   
    Public Function getFileName(name)
      If dict.Exists(name) Then
        Dim temp, tempPos
          temp = dict(name).Item("FileName")
          tempPos = 1 + InStrRev(temp, "\")
          getFileName = Mid(temp, tempPos)
      Else
        getFileName = ""
      End If
    End Function
   
    Public Function getFilePath(name)
      If dict.Exists(name) Then
        Dim temp, tempPos
          temp = dict(name).Item("FileName")
          tempPos = InStrRev(temp, "\")
          getFilePath = Mid(temp, 1, tempPos)
      Else
        getFilePath = ""
      End If
    End Function
   
    Public Function getFilePathComplete(name)
      If dict.Exists(name) Then
        getFilePathComplete = dict(name).Item("FileName")
      Else
        getFilePathComplete = ""
      End If
    End Function

    Public Function getFileSize(name)
      If dict.Exists(name) Then
        getFileSize = LenB(dict(name).Item("Value"))
      Else
        getFileSize = 0
      End If
    End Function

    Public Function getFileSizeTranslated(name)
      If dict.Exists(name) Then
        temp = 1 + LenB(dict(name).Item("Value"))
          If Len(temp) <= 3 Then
            getFileSizeTranslated = temp & " bytes"
          ElseIf Len(temp) > 6 Then
            temp = FormatNumber(((temp / 1024) / 1024), 2)
            getFileSizeTranslated = temp & " megabytes" 
          Else
            temp = FormatNumber((temp / 1024), 2)
            getFileSizeTranslated = temp & " kilobytes"
          End If
      Else
        getFileSizeTranslated = ""
      End If
    End Function
   
    Public Function getContentType(name)
      If dict.Exists(name) Then
        getContentType = dict(name).Item("ContentType")
      Else
        getContentType = ""
      End If
    End Function

  Private Sub getData(rawData)
    Dim separator
      separator = MidB(rawData, 1, InstrB(1, rawData, ChrB(13)) - 1)

    Dim lenSeparator
      lenSeparator = LenB(separator)

    Dim currentPos
      currentPos = 1
    Dim inStrByte
      inStrByte = 1
    Dim value, mValue
    Dim tempValue
      tempValue = ""

    While inStrByte > 0
      inStrByte = InStrB(currentPos, rawData, separator)
      mValue = inStrByte - currentPos

      If mValue > 1 Then
        value = MidB(rawData, currentPos, mValue)

        Dim begPos, endPos, midValue, nValue
        Dim intDict
          Set intDict = Server.CreateObject("Scripting.Dictionary")
   
          begPos = 1 + InStrB(1, value, ChrB(34))
          endPos = InStrB(begPos + 1, value, ChrB(34))
          nValue = endPos

        Dim nameN
          nameN = MidB(value, begPos, endPos - begPos)

        Dim nameValue, isValid
          isValid = True
         
          If InStrB(1, value, stringToByte("Content-Type")) > 1 Then

            begPos = 1 + InStrB(endPos + 1, value, ChrB(34))
            endPos = InStrB(begPos + 1, value, ChrB(34))
 
            If endPos = 0 Then
              endPos = begPos + 1
              isValid = False
            End If
           
            midValue = MidB(value, begPos, endPos - begPos)
              intDict.Add "FileName", trim(byteToString(midValue))
               
            begPos = 14 + InStrB(endPos + 1, value, stringToByte("Content-Type:"))
            endPos = InStrB(begPos, value, ChrB(13))
           
            midValue = MidB(value, begPos, endPos - begPos)
              intDict.Add "ContentType", trim(byteToString(midValue))
           
            begPos = endPos + 4
            endPos = LenB(value)
           
            nameValue = MidB(value, begPos, endPos - begPos)
          Else
            nameValue = trim(byteToString(MidB(value, nValue + 5)))
          End If

          If isValid = true Then
            intDict.Add "Value", nameValue
            intDict.Add "Name", nameN

            dict.Add byteToString(nameN), intDict
          End If
      End If

      currentPos = lenSeparator + inStrByte
    Wend
  End Sub
 
  End Class

  Private Function stringToByte(toConv)
    Dim tempChar
    For i = 1 to Len(toConv)
      tempChar = Mid(toConv, i, 1)
      stringToByte = stringToByte & chrB(AscB(tempChar))
    Next
  End Function

  Private Function byteToString(toConv)
    For i = 1 to LenB(toConv)
      byteToString = byteToString & chr(AscB(MidB(toConv,i,1)))
    Next
  End Function
%>
<%

  Response.Buffer = True

  ' load object
  Dim load
      Set load = new Loader
     
      ' calling initialize method
      load.initialize
     
  ' File binary data
  Dim fileData
      fileData = load.getFileData("file")
  ' File name
  Dim fileName
      fileName = LCase(load.getFileName("file"))
  ' File path
  Dim filePath
      filePath = load.getFilePath("file")
  ' File path complete
  Dim filePathComplete
      filePathComplete = load.getFilePathComplete("file")
  ' File size
  Dim fileSize
      fileSize = load.getFileSize("file")
  ' File size translated
  Dim fileSizeTranslated
      fileSizeTranslated = load.getFileSizeTranslated("file")
  ' Content Type
  Dim contentType
      contentType = load.getContentType("file")
  ' No. of Form elements
  Dim countElements
      countElements = load.Count
  ' Value of text input field "name"
  Dim nameInput
      nameInput = load.getValue("navn")
  Dim emailInput
      emailInput = load.getValue("email")
  Dim beskInput
      beskInput = load.getValue("Besk")
  Dim titelInput
      titelInput = load.getValue("titel")
  Dim emneInput
      emneInput = load.getValue("emne")
  Dim karakterInput
      karakterInput = load.getValue("Karakter")
  Dim fagInput
      fagInput = load.getValue("fag")
  ' Path where file will be uploaded
  Dim pathToFile
      pathToFile = Server.mapPath("uploaded/") & "\" & fileName
  ' Uploading file data
  Dim fileUploaded
      fileUploaded = load.saveToFile ("file", pathToFile)
     
  ' destroying load object
  Set load = Nothing


%>

<html>
<head>
  <title>File Uploading with ASP</title>
  <style>
      body, input, td { font-family:verdana,arial; font-size:10pt; }
  </style>
</head>
<body>

  <table width="700" border="1" align="center">
  <tr>
      <td>File Name</td><td><%= fileName %></td>
  </tr><tr>
      <td>File Path</td><td><%= filePath %></td>
  </tr><tr>
      <td>File Path Complete</td><td><%= filePathComplete %></td>
  </tr><tr>
      <td>File Size</td><td><%= fileSize %></td>
  </tr><tr>
      <td>File Size Translated</td><td><%= fileSizeTranslated %></td>
  </tr><tr>
      <td>Content Type</td><td><%= contentType %></td>
  </tr><tr>
      <td>No. of Form Elements</td><td><%= countElements %></td>
  </tr><tr>
      <td>Name</td><td><%= nameInput %></td>
  </tr>
  </table><br><br>
 
  <p style="padding-left:220;">
  <%


      If fileUploaded = True Then
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.connectionstring = "Provider=SQLOLEDB;Data Source=192.168.1.15;Initial Catalog=paniktimen.dk; User ID=paniktimen.dk;Password=pe29nv;"

Conn.Open
    Set rs = Server.CreateObject("ADODB.RecordSet")
    strSQL = "Select * From Link2"
    rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic



      rs.AddNew

      rs("Name") = nameinput
      rs("Email") = emailinput
      rs("Link") = fileName
      rs("Besk") = beskinput
      rs("Titel") = titelinput
      rs("Emne") = emneinput
      rs("Karakter") = karakterinput
      rs("Fag") = faginput

      rs("dato") = date()
      rs("kl") = time()
     
      rs.Update

    Response.Write fileName & " data uploaded..."
     

Else
        Response.Write "<font color=""red"">File could not be uploaded..."
        Response.Write "</font>"
        Response.Write "<br>Please select a file before hitting the 'Submit'"
        Response.Write " button."
      End If
  %>
  </p>
 
  <br>

</body>
</html>


Nu vil jeg gerne vide hvordan at jeg udgår at den overskriver filer med samme navn der allerede er uploadet?

Nogen der kan svare det håber jeg :D
Et svar der fungere får points'ne :)
Avatar billede tmceu Praktikant
04. september 2002 - 18:33 #1
Jeg orker helt ærligt ikke at vade hele din kode igennem, men du kan sandsynligvis bruge FSO metoden FileExists der returnerer hhv. True/False.
Avatar billede jonas-i Nybegynder
04. september 2002 - 20:56 #2
Hehe doven var? Du får jo ellers 60 points for at finde stedet hvor den skal sættes ind :)
Avatar billede jonas-i Nybegynder
07. september 2002 - 17:30 #3
Nå endnu en gang fandt jeg selv ud af det :D
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

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