Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

File Uploads 3

Status
Not open for further replies.

GIGN

Programmer
Oct 6, 2000
1,082
0
0
NZ
What is the standard paractice for grabbing uploaded files?
I have used this line to see that the content has been posted:
Response.BinaryWrite Request.BinaryRead(Request.TotalBytes)

What do I do now? Is there an easier way to get the data than searching thru it? I know there are many programs I can install on my own machine to cope with these, but how would you go about it regarding a remote computer?

 
I post my code witch uploads as manny file i want...
Hope this helps

upload.asp
---------
<%
'***************************************
' File: Upload.asp
' Author: Jacob &quot;Beezle&quot; 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 &quot;AS IS&quot;.
' Enjoy!
'****************************************

Class FileUploader
Public Files
Private mcolFormElem

Private Sub Class_Initialize()
Set Files = Server.CreateObject(&quot;Scripting.Dictionary&quot;)
Set mcolFormElem = Server.CreateObject(&quot;Scripting.Dictionary&quot;)
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 = &quot;&quot;
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(&quot;--&quot;))

nPos = InstrB(nDataBoundPos, biData, CByteString(&quot;Content-Disposition&quot;))
nPos = InstrB(nPos, biData, CByteString(&quot;name=&quot;))
nPosBegin = nPos + 6
nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
nPosFile = InstrB(nDataBoundPos, biData, CByteString(&quot;filename=&quot;))
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, &quot;\&quot;))

nPos = InstrB(nPosEnd, biData, CByteString(&quot;Content-Type:&quot;))
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 =&quot;&quot;
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 = &quot;&quot; Or FileName = &quot;&quot; Then Exit Sub
If Mid(sPath, Len(sPath)) <> &quot;\&quot; Then sPath = sPath & &quot;\&quot;

Set oFS = Server.CreateObject(&quot;Scripting.FileSystemObject&quot;)
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
%>
-----------
uploadexample.asp
-----------
<%@ Language=VBScript %>
<%Option Explicit%>
<!-- #include file=&quot;upload.asp&quot; -->
<%

'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 &quot;<b>Thank you for your upload &quot; & Uploader.Form(&quot;fullname&quot;) & &quot;</b><br>&quot;

' Check if any files were uploaded
If Uploader.Files.Count = 0 Then
Response.Write &quot;File(s) not uploaded.&quot;
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(&quot;saveto&quot;) = &quot;disk&quot; Then

' Save the file
File.SaveToDisk &quot;E:\UploadedFiles\&quot;

ElseIf Uploader.Form(&quot;saveto&quot;) = &quot;database&quot; Then

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

RS(&quot;filename&quot;) = File.FileName
RS(&quot;filesize&quot;) = File.FileSize
RS(&quot;contenttype&quot;) = File.ContentType

' Save the file to the database
File.SaveToDatabase RS(&quot;filedata&quot;)

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

' Output the file details to the browser
Response.Write &quot;File Uploaded: &quot; & File.FileName & &quot;<br>&quot;
Response.Write &quot;Size: &quot; & File.FileSize & &quot; bytes<br>&quot;
Response.Write &quot;Type: &quot; & File.ContentType & &quot;<br><br>&quot;
Next
End If
%>
--------------
uploadform.htm
--------------<HTML>
<HEAD>
<META NAME=&quot;GENERATOR&quot; Content=&quot;Microsoft Visual Studio 6.0&quot;>
<TITLE></TITLE>
</HEAD>
<BODY>
<FORM METHOD=&quot;POST&quot; ENCTYPE=&quot;multipart/form-data&quot; ACTION=&quot;uploadexmple.asp&quot;>
<TABLE BORDER=0>
<tr><td><b>Enter your fullname:</b><br><INPUT TYPE=TEXT SIZE=40 NAME=&quot;FULLNAME&quot;></td></tr>
<tr><td><b>Select a file to upload:</b><br><INPUT TYPE=FILE SIZE=50 NAME=&quot;FILE1&quot;></td></tr>
<tr><td><b>Save To:</b>&nbsp;&nbsp;
Disk&nbsp;<INPUT TYPE=RADIO NAME=&quot;saveto&quot; value=&quot;disk&quot; checked>&nbsp;&nbsp;
Database&nbsp;<INPUT TYPE=RADIO NAME=&quot;saveto&quot; value=&quot;database&quot;>
</td></tr>
<tr><td align=&quot;center&quot;><INPUT TYPE=SUBMIT VALUE=&quot;Upload!&quot;></td></tr>
</TABLE>
</FORM>
</BODY>
</HTML>
---------------
readme.txt
---------------
FileUploader ASP Library (beta 1.2)
********************************************************
Author: Jacob &quot;Bèézle&quot; Gilley
Co-author: Philippe Collignon (I'm assuming)
Email: avis7@airmail.net
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. &quot;image/gif&quot;)

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

________

George
 
Wow shaddow, thats handy. Anymore gems you'd care to share?
 
Yes, I have seen this article many times - there is a lot of stuff out there, mostly crap, so it's hard to find good docs.

I am using SA-FileUp - which is a 3rd party ASP extension, which has methods for doing all this very painlessly! Just requires your host to have it installed.

Thanks ;-)
 
Because my host already has it. Yawn.
 
U are all right, there is a lot more free stuf than we can imagine... Thank's annyway...
I u whant something please post it... maybe wee all could help... ________

George
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top