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 Westi on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

writing form data to a text file AND upload a file

Status
Not open for further replies.

jkukis

Technical User
May 31, 2002
4
US
For a project, im trying to take data from a user,ie name company phone etc, and let them pick artwork to upload. I want the file to be uploaded to the server and their field info pulled andput into a text file. I am using ABCupload as a addin. I just started using asp and can't figure out whats wrong with my code.Here is the asp code:

<% @Language=&quot;VBScript&quot; %>
<html>
<body>
<%
Set theForm = Server.CreateObject(&quot;ABCUpload4.XForm&quot;)

Set theField = theForm(&quot;File&quot;)(1)
If theField.FileExists Then
theField.Save &quot;images/&quot; & theField.FileName
Response.Write &quot;File &quot; & theField.FileName & &quot; uploaded&quot;
Else
Response.Write &quot;No file uploaded&quot;
End If
%>
<%
Set fs = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Folderpath=server.mappath(&quot;\&quot;)& &quot;/uploads&quot;&quot;
Wcounter=Folderpath & &quot;/counter.txt&quot;

Set fs = CreateObject(&quot;Scripting.FileSystemObject&quot;)
if fs.FolderExists(Folderpath) then
Set a = fs.OpenTextFile(Wcounter)
hits = Clng(a.ReadLine)
hits = hits + 1
a.close
else
Set a = fs.CreateFolder(Folderpath)
hits=1
end if
' Creates text file that keeps track of file number.
Set a = fs.CreateTextFile(Wcounter,True)
a.WriteLine(hits)
a.Close
Set fs=nothing

' creates text file with fields from form
Set fs = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set a = fs.CreateTextFile(Folderpath & &quot;\&quot; & hits & &quot;.txt&quot;)
a.WriteLine(&quot;Date Submitted&quot; & Now() & &quot;.&quot;)
a.WriteLine theForm(&quot;Name&quot;)
a.WriteLine theForm(&quot;Company&quot;)
a.WriteLine theForm(&quot;Phone&quot;)
a.WriteLine theForm(&quot;Email&quot;)
a.WriteLine theForm(&quot;message&quot;)
a.Close
Set a=nothing
Set fs=nothing
%>
<%
Response.Write &quot;Thank you for uploading your file.&quot;<br>
'Gives user a proof number based on the value of hits.
Response.Write &quot;Your proof number is&quot; & hits & &quot;.&quot;
'Redirected to Cox website after upload finishes.
%>
</body>
</html>
-----------------------
and the html:
<html>
<body>
<form method=&quot;post&quot; action=&quot;mixedupload.asp&quot; enctype=&quot;multipart/form-data&quot;>
<table border=0>
<tr>
<td>
<p><b>Name</b>:
</td>
<td>
<input type=&quot;text&quot; name=&quot;Name&quot; size=40>
</td>
</tr>
<tr>
<td>
<p><b>Company/Organization</b>:
</td>
<td>
<input type=&quot;text&quot; name=&quot;Company&quot; size=40>
</td>
</tr>
<tr>
<td>
<p><b>Phone Number</b>:
</td>
<Td>
<input type=&quot;text&quot; name=&quot;Phone&quot; size=40>
</td>
</tr>
<tr>
<Td>
<p><b>E-mail Address</b>:
</td>
<td>
<input type=&quot;text&quot; name=&quot;Email&quot; size=40>
</td>
</tr>
<tr>
<tr>
<Td>
<p><b>Description of Artwork</b>:
</td>
<td>
<textarea name=&quot;message&quot; cols=&quot;30&quot; rows=&quot;4&quot;></textarea>
</td>
</tr>
<tr>
<Td>
<p><b>File</b>:
</td>
<Td>
<input type=&quot;file&quot; name=&quot;File&quot;>
</td>
</tr>
</table>
<input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;Submit Artwork&quot;>
</form>
<body>
</html>
 
also, my problem is that nothing happens with the code at all, I can't seem to find where the file is being saved or where the text file is saved if it even is.
 
jkukis,

What kind of error are you getting? You may be running into the problem of separating the upload file from your form fields. Does ABCupload separate the file from form fields when it does ENCTYPE=&quot;multipart/form-data&quot;?

fengshui_1998
 
ABCUpload just had the first part of the code for uploading the file, the second part that does everything with the form is froma nother site on the net and i attempted to edit it, if anyone knows a way that I can do what I wanna do thatd be helpful.
 
jkukis,


Here are three files Homepage.asp, Upload.asp, and Uploadexmple.asp. You need to create the &quot;temp&quot; directory in the directory where you place these files. If you want to create a new form field, you can refer to it as

Uploader.Form(&quot;NewFieldName&quot;)

Once you get the form field data, you can use FileScripting Object to create a file and write to that file.

Cheers,
fengshui_1998

----------------------
Homepage.asp
----------------------
<HTML>
<HEAD>
<META NAME=&quot;GENERATOR&quot; Content=&quot;Microsoft Visual Studio 6.0&quot;>
<TITLE></TITLE>
</HEAD>
<BODY>
<FORM NAME=&quot;upload&quot; METHOD=&quot;POST&quot; ENCTYPE=&quot;multipart/form-data&quot; ACTION=&quot;uploadexmple.asp&quot; onsubmit=&quot;return checkit()&quot;>
<TABLE BORDER=0>
<tr><td><b>Enter your first name:</b><br><INPUT TYPE=TEXT SIZE=40 NAME=&quot;firstname&quot;></td></tr>
<tr><td><b>Enter your last name:</b><br><INPUT TYPE=TEXT SIZE=40 NAME=&quot;lastname&quot;></td></tr>
<tr><td><b>Enter your Phone:</b><br><INPUT TYPE=TEXT SIZE=40 NAME=&quot;phone&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>
<script language=&quot;javascript&quot;>
function checkit(){
var fullname = document.upload.fullname.value;
var lastname = document.upload.lastname.value;
var phone = document.upload.phone.value;
var file1 = document.upload.file1.value;
if (file1 == &quot;&quot;)
{
alert(&quot;File name is required!&quot;);
return false;
}
}


</script>
</HTML>

----------------
Uploadexmple.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.
'
' Added the following lines to accomodate for large files taking a long time.
Dim timeout, spath
timeout = 3600 ' In seconds
Server.ScriptTimeout = timeout

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

' This starts the upload process
Uploader.Upload()
'
Uploader.Form(&quot;FormDataName&quot;)
'******************************************
' 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<br> &quot; & _
&quot;First name: &quot; & Uploader.Form(&quot;firstname&quot;) & &quot;<br>&quot; & _
&quot;Last name: &quot; & Uploader.Form(&quot;lastname&quot;) & &quot;<br>&quot; & _
&quot;Phone: &quot; & Uploader.Form(&quot;phone&quot;) & &quot;<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;c:\Dev\DMS\UploadedFiles\&quot;
File.SaveToDisk Server.mapPath(&quot;temp&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 Spath: &quot; & spath & &quot; : &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

%>
---------------------------
UPLOAD.ASP
---------------------------


<%
' timeout = 3600 ' In seconds
Server.ScriptTimeout = 3600
'***************************************
' 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
%>

 
FengShui1998,
I copied and pasted the code into the three seperate files above. When i open up the homepage.asp and enter data and pick a file, after clicking submit, it just displays me the code from uploadexmple.asp, instead of actually running it.
I created the temp directory under the same directory the three files are in, what am i doing wrong??
 
jkukis,

Sorry,

delete this line...

File.SaveToDisk &quot;c:\Dev\DMS\UploadedFiles\&quot;


fengshui_1998
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top