0

Hey guys having some trouble with an asp script here. The following is the code i am using for an upload function for users to upload an image

<%
' Create the FileUploader
Dim Uploader, File, FileSys, FilePath
Set Uploader = New FileUploader

' This starts the upload process
Uploader.Upload()

' Check if any files were uploaded

If Uploader.Files.Count = 0 Then
    Response.Write "File(s) not uploaded."
Else
    ' Loop through the uploaded files
    For Each File In Uploader.Files.Items

        ' Set upload Path and Filename to check if that file already exists
        FilePath = "C:\inetpub\wwwroot\coursework2\database\uploads\"&File.FileName
        Set FileSys = CreateObject("Scripting.FileSystemObject")

        ' If intended uploaded file already exists in the specified directory do alert and redirect previous page
        If FileSys.FileExists(FilePath) then 
            Response.Write("<script>alert('Sorry FileName:"& File.FileName &" Already Used!!  Please Rename Your Local File')</script>")
            Response.Write("<script>window.location.href='index.asp'</script>")  
        else
            ' Else Save the file
            File.SaveToDisk "C:\inetpub\wwwroot\coursework2\database\uploads"
        end if
    Next
    ' Confirm file saved and redirect to previous page if more files to be uploaded
    Response.Write("<script>alert('File Saved')</script>")  
    Response.Write("<script>window.location.href='index.asp'</script>")  
End If

%>

This is connection string to the server i am trying to upload the file too

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="& Server.MapPath("/dek0272/coursework2/database/uploads")

This is where i would like to set the file path and the File.save to disk location as

http://focserver.londonmet.ac.uk/dek0272/coursework2/database/uploads/

When i change the filepath and file.save to disk location to this address. The function does not upload anything. I beleive i am writing the path wrong. I have tried many ways to write it and still no luck.

Any suggestions

Thanks

This is the upLoadFunctions.asp file

<%

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 = 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(sInputName), 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

Class UploadedFile
    Public ContentType
    Public FileName
    Public FileData

    Public Property Get FileSize()
        FileSize = LenB(FileData)
    End Property

    Public Sub SaveToDisk(sPath)
        Dim oFS, oFile
        Dim nIndex

        If sPath = "" Or FileName = "" Then Exit Sub
        If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"

        Set oFS = Server.CreateObject("Scripting.FileSystemObject")
        If Not oFS.FolderExists(sPath) Then Exit Sub

        Set oFile = oFS.CreateTextFile(sPath & FileName, True)

        For nIndex = 1 to LenB(FileData)
            oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
        Next

        oFile.Close
    End Sub

    Public Sub SaveToDatabase(ByRef oField)
        If LenB(FileData) = 0 Then Exit Sub

        If IsObject(oField) Then
            oField.AppendChunk FileData
        End If
    End Sub

End Class
  • First, this is Classic ASP, it has nothing to do with ASP.net. Second, a connection string is something you use to connect to a database (in this case an Access accdb file), not a webserver. Does Fileuploader refer to a class file you've included earlier on in your script? – John Dec 17 '16 at 20:42
  • good day @John. I have edited the post to include the Fileuploader function. Thank you for your response – Iids Sunglasses Tnt Dec 18 '16 at 12:00
  • If you're uploading files in Classic ASP you have two options. One is to install a third party component like Persits ASP upload. The other is to use an ADODB.Stream object. There are a lot of ready made scripts out there, the one I always use is called Freeaspupload. Unfortunately the site where it was found has been down for some time, but you can find it with the internet archive here - https://web.archive.org/web/20131216133943/http://www.freeaspupload.net/ . Also, take a look at this question - http://stackoverflow.com/questions/12190305/how-to-upload-files-with-asp-classic – John Dec 18 '16 at 12:21

1 Answers1

0

Do you get any ASP error-Message? If yes, what error-code? If not, try an unvalid filepath in order to provoke an error (to see, whether the filepath is the problem or not).

Afaik this lines

 Set FileSys = CreateObject("Scripting.FileSystemObject")

should be

Set FileSys = Server.CreateObject("Scripting.FileSystemObject")

Another possible source of error: Did you check whether the filepath folder has got proper writing permissions? For how to set writing permissions on IIS 7.5 (=Win Server 2008R2) see:

How do I give ASP.NET permission to write to a folder in Windows 7?

Community
  • 1
  • 1
  • Hey thank you for your time taken to answer. The folder does have correct permission. There was no error code. The function said it was successful but the file was not present for viewing. I am going to try what you said. It it were u writing the filepath what format would you write it in – Iids Sunglasses Tnt Dec 16 '16 at 10:37