Wrox Programmer Forums
|
Classic ASP Basics For beginner programmers starting with "classic" ASP 3, pre-".NET." NOT for ASP.NET 1.0, 1.1, or 2.0
Welcome to the p2p.wrox.com Forums.

You are currently viewing the Classic ASP Basics section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old October 10th, 2003, 05:55 AM
Authorized User
 
Join Date: Oct 2003
Posts: 11
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via ICQ to ittorget
Default ASP pure script upload

I need to know how to make a upload script in pure Active Server Pages. No component or something like that. Just pure code.
If you know how to do this plz contact me here !

 
Old October 10th, 2003, 06:11 AM
Imar's Avatar
Wrox Author
 
Join Date: Jun 2003
Posts: 17,089
Thanks: 80
Thanked 1,576 Times in 1,552 Posts
Default

Hi there,

It can be done, but it's a bit trick. Below you'll find a Readme.txt, a Upload.asp and a sample form and page that does what you need. Credits go to Jacob "Bèézle" Gilley.

I haven't tested it, but it's supposed to work ;)

Cheers,

Imar


==================
| Readme.txt
==================

FileUploader ASP Library (beta 1.2)
************************************************** ******
 Author: Jacob "Bèézle" Gilley
 Co-author: Philippe Collignon (I'm assuming)
 Email: [email protected]
 Purpose: To provide a free and easy way to perform file
          uploading across the web via Active Server Pages.
************************************************** ******

NOTE - YOU MUST HAVE VBSCRIPT v5.0 INSTALLED ON YOUR WEB SERVER
       FOR THIS LIBRARY TO FUNCTION CORRECTLY. YOU CAN OBTAIN IT
       FREE FROM MICROSOFT WHEN YOU INSTALL INTERNET EXPLORER 5.0
       OR LATER.

Object Overview
---------------

================================================== ======
FileUploader Object
================================================== ======

METHODS
---------
 Upload() - Begins the file upload process. MUST BE CALLED FIRST!

PROPERTIES
------------
 Files - A Collection of UploadedFile objects. (see below)
 Form - A Collection of posted form elements.

================================================== ======


================================================== ======
UploadedFile Object
================================================== ======

METHODS
---------
 SaveToDisk(Path) - Accepts a fully qualified physical path
        to save the uploaded file to.

 SaveToDatabase(Field) - Accepts an ADODB.Field object to save
             the uploaded file to. The ADODB.Recordset
             must be opened by you and the database must
             support Binary Large Objects (BLOBS).

PROPERTIES
------------
 FileName - The name of the file uploaded. (Does not include path information)
 FileSize - The size, in bytes, of the file uploaded.
 FileData - The raw binary file data.
 ContentType - The application association string that binds a particular file
       extention to an application. (e.g. "image/gif")

================================================== ======



==================
| Upload.asp
==================

<%
'***************************************
' File: Upload.asp
' Author: Jacob "Beezle" Gilley
' Email: [email protected]
' Date: 12/07/2000
' Comments: The code for the Upload, CByteString,
' CWideString subroutines was originally
' written by Philippe Collignon...or so
' he claims. Also, I am not responsible
' for any ill effects this script may
' cause and provide this script "AS IS".
' Enjoy!
'****************************************

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
%>


==================
| Uploadexmple.asp
==================

<%@ Language=VBScript %>
<%Option Explicit%>

<%

'NOTE - YOU MUST HAVE VBSCRIPT v5.0 INSTALLED ON YOUR WEB SERVER
' FOR THIS LIBRARY TO FUNCTION CORRECTLY. YOU CAN OBTAIN IT
' FREE FROM MICROSOFT WHEN YOU INSTALL INTERNET EXPLORER 5.0
' OR LATER.


' Create the FileUploader
Dim Uploader, File
Set Uploader = New FileUploader

' This starts the upload process
Uploader.Upload()

'******************************************
' Use [FileUploader object].Form to access
' additional form variables submitted with
' the file upload(s). (used below)
'******************************************
Response.Write "<b>Thank you for your upload " & Uploader.Form("fullname") & "</b><br>"

' 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

        ' Check where the user wants to save the file
        If Uploader.Form("saveto") = "disk" Then

            ' Save the file
            File.SaveToDisk "E:\UploadedFiles\"

        ElseIf Uploader.Form("saveto") = "database" Then

            ' Open the table you are saving the file to
            Set RS = Server.CreateObject("ADODB.Recordset")
            RS.Open "MyUploadTable", "CONNECT STRING OR ADO.Connection", 2, 2
            RS.AddNew ' create a new record

            RS("filename") = File.FileName
            RS("filesize") = File.FileSize
            RS("contenttype") = File.ContentType

            ' Save the file to the database
            File.SaveToDatabase RS("filedata")

            ' Commit the changes and close
            RS.Update
            RS.Close
        End If

        ' Output the file details to the browser
        Response.Write "File Uploaded: " & File.FileName & "<br>"
        Response.Write "Size: " & File.FileSize & " bytes<br>"
        Response.Write "Type: " & File.ContentType & "<br><br>"
    Next
End If

%>


==================
| UploadForm.html
==================

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="uploadexmple.asp">
    <TABLE BORDER=0>
    <tr><td><b>Enter your fullname:</b><br><INPUT TYPE=TEXT SIZE=40 NAME="FULLNAME"></td></tr>
    <tr><td><b>Select a file to upload:</b><br><INPUT TYPE=FILE SIZE=50 NAME="FILE1"></td></tr>
    <tr><td><b>Save To:</b>&nbsp;&nbsp;
        Disk&nbsp;<INPUT TYPE=RADIO NAME="saveto" value="disk" checked>&nbsp;&nbsp;
        Database&nbsp;<INPUT TYPE=RADIO NAME="saveto" value="database">
    </td></tr>
    <tr><td align="center"><INPUT TYPE=SUBMIT VALUE="Upload!"></td></tr>
    </TABLE>
</FORM>
</BODY>
</HTML>





---------------------------------------
Imar Spaanjaars
Everyone is unique, except for me.
 
Old April 26th, 2006, 11:56 AM
Registered User
 
Join Date: Apr 2006
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
Default

Quote:
quote:Originally posted by Imar
 Hi there,

It can be done, but it's a bit trick. Below you'll find a Readme.txt, a Upload.asp and a sample form and page that does what you need. Credits go to Jacob "Bèézle" Gilley.

I haven't tested it, but it's supposed to work ;)

Cheers,

Imar


==================
| Readme.txt
==================

FileUploader ASP Library (beta 1.2)
************************************************** ******
Author: Jacob "Bèézle" Gilley
Co-author: Philippe Collignon (I'm assuming)
Email: [email protected]
Purpose: To provide a free and easy way to perform file
         uploading across the web via Active Server Pages.
************************************************** ******

NOTE - YOU MUST HAVE VBSCRIPT v5.0 INSTALLED ON YOUR WEB SERVER
     FOR THIS LIBRARY TO FUNCTION CORRECTLY. YOU CAN OBTAIN IT
     FREE FROM MICROSOFT WHEN YOU INSTALL INTERNET EXPLORER 5.0
     OR LATER.

Object Overview
---------------

================================================== ======
FileUploader Object
================================================== ======

METHODS
---------
Upload() - Begins the file upload process. MUST BE CALLED FIRST!

PROPERTIES
------------
Files - A Collection of UploadedFile objects. (see below)
Form - A Collection of posted form elements.

================================================== ======


================================================== ======
UploadedFile Object
================================================== ======

METHODS
---------
SaveToDisk(Path) - Accepts a fully qualified physical path
        to save the uploaded file to.

SaveToDatabase(Field) - Accepts an ADODB.Field object to save
             the uploaded file to. The ADODB.Recordset
             must be opened by you and the database must
             support Binary Large Objects (BLOBS).

PROPERTIES
------------
FileName - The name of the file uploaded. (Does not include path information)
FileSize - The size, in bytes, of the file uploaded.
FileData - The raw binary file data.
ContentType - The application association string that binds a particular file
     extention to an application. (e.g. "image/gif")

================================================== ======



==================
| Upload.asp
==================

<%
'***************************************
' File: Upload.asp
' Author: Jacob "Beezle" Gilley
' Email: [email protected]
' Date: 12/07/2000
' Comments: The code for the Upload, CByteString,
' CWideString subroutines was originally
' written by Philippe Collignon...or so
' he claims. Also, I am not responsible
' for any ill effects this script may
' cause and provide this script "AS IS".
' Enjoy!
'****************************************

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
%>


==================
| Uploadexmple.asp
==================

<%@ Language=VBScript %>
<%Option Explicit%>

<%

'NOTE - YOU MUST HAVE VBSCRIPT v5.0 INSTALLED ON YOUR WEB SERVER
' FOR THIS LIBRARY TO FUNCTION CORRECTLY. YOU CAN OBTAIN IT
' FREE FROM MICROSOFT WHEN YOU INSTALL INTERNET EXPLORER 5.0
' OR LATER.


' Create the FileUploader
Dim Uploader, File
Set Uploader = New FileUploader

' This starts the upload process
Uploader.Upload()

'******************************************
' Use [FileUploader object].Form to access
' additional form variables submitted with
' the file upload(s). (used below)
'******************************************
Response.Write "<b>Thank you for your upload " & Uploader.Form("fullname") & "</b><br>"

' 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

        ' Check where the user wants to save the file
        If Uploader.Form("saveto") = "disk" Then

            ' Save the file
            File.SaveToDisk "E:\UploadedFiles\"

        ElseIf Uploader.Form("saveto") = "database" Then

            ' Open the table you are saving the file to
            Set RS = Server.CreateObject("ADODB.Recordset")
            RS.Open "MyUploadTable", "CONNECT STRING OR ADO.Connection", 2, 2
            RS.AddNew ' create a new record

            RS("filename") = File.FileName
            RS("filesize") = File.FileSize
            RS("contenttype") = File.ContentType

            ' Save the file to the database
            File.SaveToDatabase RS("filedata")

            ' Commit the changes and close
            RS.Update
            RS.Close
        End If

        ' Output the file details to the browser
        Response.Write "File Uploaded: " & File.FileName & "<br>"
        Response.Write "Size: " & File.FileSize & " bytes<br>"
        Response.Write "Type: " & File.ContentType & "<br><br>"
    Next
End If

%>


==================
| UploadForm.html
==================

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="uploadexmple.asp">
    <TABLE BORDER=0>
    <tr><td><b>Enter your fullname:</b><br><INPUT TYPE=TEXT SIZE=40 NAME="FULLNAME"></td></tr>
    <tr><td><b>Select a file to upload:</b><br><INPUT TYPE=FILE SIZE=50 NAME="FILE1"></td></tr>
    <tr><td><b>Save To:</b>&nbsp;&nbsp;
        Disk&nbsp;<INPUT TYPE=RADIO NAME="saveto" value="disk" checked>&nbsp;&nbsp;
        Database&nbsp;<INPUT TYPE=RADIO NAME="saveto" value="database">
    </td></tr>
    <tr><td align="center"><INPUT TYPE=SUBMIT VALUE="Upload!"></td></tr>
    </TABLE>
</FORM>
</BODY>
</HTML>

Is there a limitation on file size? I cant upload an image file > 1mb
ne 1 tried that?
sheetal



---------------------------------------
Imar Spaanjaars
Everyone is unique, except for me.
 
Old April 26th, 2006, 12:48 PM
Registered User
 
Join Date: Apr 2006
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
Default

Hi is there a file size restriction?? I cant upload a jpg > 1mb
Sheetal
Quote:
quote:Originally posted by Imar
 Hi there,

It can be done, but it's a bit trick. Below you'll find a Readme.txt, a Upload.asp and a sample form and page that does what you need. Credits go to Jacob "Bèézle" Gilley.

I haven't tested it, but it's supposed to work ;)

Cheers,

Imar


==================
| Readme.txt
==================

FileUploader ASP Library (beta 1.2)
************************************************** ******
Author: Jacob "Bèézle" Gilley
Co-author: Philippe Collignon (I'm assuming)
Email: [email protected]
Purpose: To provide a free and easy way to perform file
         uploading across the web via Active Server Pages.
************************************************** ******

NOTE - YOU MUST HAVE VBSCRIPT v5.0 INSTALLED ON YOUR WEB SERVER
     FOR THIS LIBRARY TO FUNCTION CORRECTLY. YOU CAN OBTAIN IT
     FREE FROM MICROSOFT WHEN YOU INSTALL INTERNET EXPLORER 5.0
     OR LATER.

Object Overview
---------------

================================================== ======
FileUploader Object
================================================== ======

METHODS
---------
Upload() - Begins the file upload process. MUST BE CALLED FIRST!

PROPERTIES
------------
Files - A Collection of UploadedFile objects. (see below)
Form - A Collection of posted form elements.

================================================== ======


================================================== ======
UploadedFile Object
================================================== ======

METHODS
---------
SaveToDisk(Path) - Accepts a fully qualified physical path
        to save the uploaded file to.

SaveToDatabase(Field) - Accepts an ADODB.Field object to save
             the uploaded file to. The ADODB.Recordset
             must be opened by you and the database must
             support Binary Large Objects (BLOBS).

PROPERTIES
------------
FileName - The name of the file uploaded. (Does not include path information)
FileSize - The size, in bytes, of the file uploaded.
FileData - The raw binary file data.
ContentType - The application association string that binds a particular file
     extention to an application. (e.g. "image/gif")

================================================== ======



==================
| Upload.asp
==================

<%
'***************************************
' File: Upload.asp
' Author: Jacob "Beezle" Gilley
' Email: [email protected]
' Date: 12/07/2000
' Comments: The code for the Upload, CByteString,
' CWideString subroutines was originally
' written by Philippe Collignon...or so
' he claims. Also, I am not responsible
' for any ill effects this script may
' cause and provide this script "AS IS".
' Enjoy!
'****************************************

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
%>


==================
| Uploadexmple.asp
==================

<%@ Language=VBScript %>
<%Option Explicit%>

<%

'NOTE - YOU MUST HAVE VBSCRIPT v5.0 INSTALLED ON YOUR WEB SERVER
' FOR THIS LIBRARY TO FUNCTION CORRECTLY. YOU CAN OBTAIN IT
' FREE FROM MICROSOFT WHEN YOU INSTALL INTERNET EXPLORER 5.0
' OR LATER.


' Create the FileUploader
Dim Uploader, File
Set Uploader = New FileUploader

' This starts the upload process
Uploader.Upload()

'******************************************
' Use [FileUploader object].Form to access
' additional form variables submitted with
' the file upload(s). (used below)
'******************************************
Response.Write "<b>Thank you for your upload " & Uploader.Form("fullname") & "</b><br>"

' 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

        ' Check where the user wants to save the file
        If Uploader.Form("saveto") = "disk" Then

            ' Save the file
            File.SaveToDisk "E:\UploadedFiles\"

        ElseIf Uploader.Form("saveto") = "database" Then

            ' Open the table you are saving the file to
            Set RS = Server.CreateObject("ADODB.Recordset")
            RS.Open "MyUploadTable", "CONNECT STRING OR ADO.Connection", 2, 2
            RS.AddNew ' create a new record

            RS("filename") = File.FileName
            RS("filesize") = File.FileSize
            RS("contenttype") = File.ContentType

            ' Save the file to the database
            File.SaveToDatabase RS("filedata")

            ' Commit the changes and close
            RS.Update
            RS.Close
        End If

        ' Output the file details to the browser
        Response.Write "File Uploaded: " & File.FileName & "<br>"
        Response.Write "Size: " & File.FileSize & " bytes<br>"
        Response.Write "Type: " & File.ContentType & "<br><br>"
    Next
End If

%>


==================
| UploadForm.html
==================

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="uploadexmple.asp">
    <TABLE BORDER=0>
    <tr><td><b>Enter your fullname:</b><br><INPUT TYPE=TEXT SIZE=40 NAME="FULLNAME"></td></tr>
    <tr><td><b>Select a file to upload:</b><br><INPUT TYPE=FILE SIZE=50 NAME="FILE1"></td></tr>
    <tr><td><b>Save To:</b>&nbsp;&nbsp;
        Disk&nbsp;<INPUT TYPE=RADIO NAME="saveto" value="disk" checked>&nbsp;&nbsp;
        Database&nbsp;<INPUT TYPE=RADIO NAME="saveto" value="database">
    </td></tr>
    <tr><td align="center"><INPUT TYPE=SUBMIT VALUE="Upload!"></td></tr>
    </TABLE>
</FORM>
</BODY>
</HTML>





---------------------------------------
Imar Spaanjaars
Everyone is unique, except for me.
 
Old April 27th, 2006, 04:22 AM
Friend of Wrox
 
Join Date: Jul 2003
Posts: 683
Thanks: 0
Thanked 1 Time in 1 Post
Default

Which version of IIS are you using?

Thanks,

Chris

 
Old May 11th, 2006, 03:49 AM
Registered User
 
Join Date: May 2006
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
Default

I am running this script on IIS 6 and it runs fine (default install on my workstation).
By the way, I wanted to specify filesize limitation for this story, so I modified the upload.asp (see script below) and this works fine for a filesize limit of 3MB. Is this a good solution or is there a betterone?
Thx in advance (I am new here from today). Cheers

Quote:
quote:
If oUploadFile.FileSize > 0 Then Files.Add LCase(sInputName), oUploadFile


' filesize limit
 If oUploadFile.FileSize > 3145728 Then
 response.write("3MB is max. filesize")
 response.end
End If
'_______________


 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
 
Old May 15th, 2006, 08:17 AM
Friend of Wrox
 
Join Date: Jul 2003
Posts: 683
Thanks: 0
Thanked 1 Time in 1 Post
Default

IIS6 has a size restriction on asp uploads, have you adjusted this?

The following link tells you how: http://support.persits.com/show.asp?code=PS030911112

HTH,

Chris

 
Old May 26th, 2006, 09:18 AM
Friend of Wrox
 
Join Date: Jan 2005
Posts: 1,525
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via ICQ to crmpicco Send a message via AIM to crmpicco Send a message via MSN to crmpicco Send a message via Yahoo to crmpicco
Default

thanks for the code Imar, worked great

www.crmpicco.co.uk
www.ie7.com
 
Old July 2nd, 2006, 10:49 AM
ctt ctt is offline
Registered User
 
Join Date: Jul 2006
Posts: 8
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via AIM to ctt
Default

I am running VBSCRIPT 5.6, but I don't have the FileUploader object on my machine... anyone know why?

- Michael Levkoff -
 
Old September 25th, 2006, 03:57 PM
Registered User
 
Join Date: Nov 2004
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via MSN to oldplanet
Default

Hi There.

This script works fine when i try to upload data to E drive or C drive.

But the actual problem starts when i try to upload data to some database.

I am using this connection string

"provider=sqloledb;" & _
           "data source=my_Server;" & _
           "initial catalog=pubs;" & _
           "user id=myUsername;" & _
           "password=myPassword;"

Pls help me with the connection string.

Thanks in advance.





Similar Threads
Thread Thread Starter Forum Replies Last Post
Pure ASP Upload ozzii Classic ASP Professional 1 January 8th, 2007 06:41 PM
Upload file to server from ASP script crmpicco Classic ASP Components 2 June 14th, 2006 01:25 AM
asp file upload script having problems with MYSQL paulmcn Classic ASP Databases 0 September 16th, 2005 01:26 PM
PURE asp upload problem ., alert from Javascript kasanar ASP.NET 1.0 and 1.1 Professional 0 February 19th, 2005 10:06 AM
Problem with upload script jeremy108 BOOK: Beginning PHP4/PHP 5 ISBN: 978-0-7645-4364-7; v5 ISBN: 978-0-7645-5783-5 4 July 2nd, 2003 01:48 PM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.