Click to See Complete Forum and Search --> : ASP Upload Script Issues.


foetoid
06-30-2008, 12:52 PM
Well, I've found out that I cant use "request.form" with "request.BinaryRead." The big question is, what do I do instead? Is there another method to pull all the form data into my script?

I was reading something about objUpload, but none of it is making a whole lot of sense to me.

Any tips?

foetoid
06-30-2008, 04:41 PM
So I've made some progress. I found out that the idea is to use upload.form instead of request.form... Supposedly.

I finally got the code to stop spitting errors at me, however, it's no longer working.

Here's some small excerpts from the code if someone is willing to check them out.


<%@ Language=VBScript %>
<%Option Explicit%>
<!-- #include file="upLoadFunctions.asp" -->
<% dim (all fields) %>
<%
'Check to see if title has been entered or not
u_title=upload.form("u_title")
if u_title = "" then
%>

THE FORM

<%
else
u_title=upload.form("u_title")
u_cell2=upload.form("u_cell2")
u_cell4=upload.form("u_cell4")
etc...

Dim Uploader, File, FileSys, FilePath, newfolder, newfolderpath


newfolderpath="c:\inetpub\wwwroot\hr\jobbuilder\application\" & month(date())& day(date())& year(date()) & "-" & ""&g_filename & "\"
set filesys=CreateObject("scripting.filesystemobject")
set newfolder = filesys.createfolder(newfolderpath)


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\hr\jobbuilder\application\"& month(date())& day(date())& year(date()) & "-" & ""&g_filename & "\" &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='upLoadStart.asp'</script>")
else
' Else Save the file
File.SaveToDisk "C:\\Inetpub\\wwwroot\\hr\\jobbuilder\\application\\" & month(date())& day(date())& year(date()) & "-" & ""&g_filename & "\\"
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.close</script>")
End If

THE REST OF THE SCRIPT THAT DID WORK
%>
<%
end if
%>

foetoid
06-30-2008, 04:45 PM
Also, this is the upLoadFunctions.asp that is called


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