View Full Version : Upload component needed

01-27-2005, 05:20 AM
I'm new to this forum and am very interested in getting some help and suggestions.

I've created a web site that I want people to send their digital photographs to me for print on keepsake items. What is the best way for me to create an upload feature? I'd like the people to have the option to select either 1 picture from their harddrive or select a bunch of pictures and/or including a folder if client would like. I want the user to upload to a server in a specified location I will dedicate just for file uploads. The file extentions of these picture should be related to image extentions such as .jpg, .gif, .bmp, etc.

Note: I have already built a login page with user authentification and some other features.

Does anyone have any suggestions or know of a service that would work for me for what I'm trying to accomplish. I'm really stuck.

Thanks in advance.


01-27-2005, 06:37 AM
Try this:

Or for multiple files this:

01-27-2005, 09:40 AM
i found this in pure asp a while back:

' File: Upload.asp
' Author: Jacob "Beezle" Gilley
' Email: avis7@airmail.net
' 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
Set Files = Nothing
End If
If IsObject(mcolFormElem) Then
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
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)
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)))
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)))
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)))

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
i cant remember where i got it but i hope it helps :thumbsup:

note you need to send the form with binary using

<form method="post" enctype="multipart/form-data">
<input type="file"...>

and then you can load it with

Dim Uploader, File
Set Uploader = New FileUploader

normal form elements can be accessed with Uploader.Form() instead of Request.Form()

number of files to be uploaded can be counted with

you can loop through the files to be uploaded by doing
For Each File In Uploader.Files.Items
File.SaveToDisk "E:\UploadedFiles\"

01-27-2005, 07:01 PM
after searching google for
Jacob Gilley upload.asp
i found this link, i hope it is useful, i couldnt find any documentation from the author, sry :(


02-02-2005, 09:42 AM
And here is a another pure ASP (i.e. no components) resource (my favorite and the site does have some documentation) for letting the user upload a file which is something that was unfortunately not built into ASP:

ASP File Upload Using VBScript by John R. Lewis - 7/10/2000

02-09-2005, 04:07 PM
How do I get the element name using Uploader.Files? I have multiple files being uploaded and need to get the field name so I can upload the file name to a specific field in a DB.

Here is my snippet for uploading the files.

For Each File In Uploader.Files.Items
File.SaveToDisk upPath

How can I get the element name?

02-09-2005, 04:45 PM
i cant find it anywhere, i might just make my own, i always wanted to make a class object in asp :p

if it always loads the same ammount could you just increment in the loop and say if i = 0 then do the thing for the first element.. if i = 1..etc..

ofc using a select case :)

02-09-2005, 05:34 PM
If you want a asp upload component then
you download the source code from here. The have given a good documentation of this.
Things you can do to tweak this class are
1. Rename the file name
2. rename the file extension and most of the time renamed extensions worked between gif and jpeg.
3. can add any no of files
4. can make a copy of files and save file as 2 different files

With regards

02-10-2005, 09:37 AM
renaming between standard image types such as bmp, png, gif and jpg will usuauly still work on a site (some difficulties with transparancies on gifs etc).. HOWEVER .. you arent changing it, you are just changing the name.. the header is still a gif if you rename a gif to a jpg

02-10-2005, 01:50 PM
How do I get the element name using Uploader.Files? I have multiple files being uploaded and need to get the field name so I can upload the file name to a specific field in a DB.

Here is my snippet for uploading the files.

For Each File In Uploader.Files.Items
File.SaveToDisk upPath

How can I get the element name?

Well http://aspzone.com/articles/160.aspx in the Usage Examples area toward the bottom says this (in part):

Dim objUpload, lngLoop

If Request.TotalBytes > 0 Then
Set objUpload = New clsUpload
File(s) Uploaded: <%= objUpload.Files.Count %>

For lngLoop = 0 to objUpload.Files.Count - 1
'If accessing this page annonymously,
'the internet guest account must have
'write permission to the path below.
objUpload.Files.Item(lngLoop).Save "c:\uploads\"
Form Element Name:
<%= objUpload.Files.Key(lngLoop) %>

File Name:
<%= objUpload.Files.Item(lngLoop).FileName %>


07-22-2005, 06:27 PM
Updated (corrected) link to my earlier post:

ASP File Upload Using VBScript by John R. Lewis - 7/10/2000