以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Dot NET,C#,ASP,VB 』  (http://bbs.xml.org.cn/list.asp?boardid=43)
----  不用组件上载文件代码(二)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=52833)


--  作者:卷积内核
--  发布时间:9/19/2007 8:01:00 AM

--  不用组件上载文件代码(二)
文件futils.inc

<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>

'True PureASP upload - enables save of uploaded text fields to the disk.

'c1997-1999 Antonin Foller, PSTRUH Software, http://www.pstruh.cz

'The file is part of ScriptUtilities library

'The file enables http upload to ASP without any components.

'But there is a small problem - ASP does not allow save binary data to the disk.

' So you can use the upload for :

' 1. Upload small text (or HTML) files to server-side disk (Save the data by filesystem object)

' 2. Upload binary/text files of any size to server-side database (RS("BinField") = Upload("FormField").Value

'All uploaded files and log file will be saved to the next folder :

Dim LogFolder

LogFolder = Server.MapPath(".")

'********************************** SaveUpload **********************************

'This function creates folder and saves contents of the source fields to the disk.

'The fields are saved as files with names of form-field names.

'Also writes one line to the log file with basic informations about upload.

Function SaveUpload(Fields, DestinationFolder, LogFolder)

if DestinationFolder = "" then DestinationFolder = Server.MapPath(".")

Dim UploadNumber, OutFileName, FS, OutFolder, TimeName, Field

Dim LogLine, pLogLine, OutLine

'Create unique upload folder

Application.Lock

if Application("UploadNumber") = "" then

Application("UploadNumber") = 1

else

Application("UploadNumber") = Application("UploadNumber") + 1

end if

UploadNumber = Application("UploadNumber")

Application.UnLock

TimeName = Right("0" & Year(Now), 2) & Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2) & "_" & Right("0" & Hour(Now), 2) & Right("0" & Minute(Now), 2) & Right("0" & Second(Now), 2) & "-" & UploadNumber

Set FS = CreateObject("Scripting.FileSystemObject")

Set OutFolder = FS.CreateFolder(DestinationFolder + "\" + TimeName)

Dim TextStream

'Save the uploaded fields and create log line

For Each Field In Fields.Items

'Write content of the field to the disk

'!!!! This function uses FileSystemObject to save the file. !!!!!

'So you can only use text files to upload. Save binary files by the function takes undefined results.

'To upload binary files see ScriptUtilities, http://www.pstruh.cz

'You can save files with original file names :

'Set TextStream = FS.CreateTextFile(OutFolder & "\" & Field.FileName )

'Or with names of the fields

Set TextStream = FS.CreateTextFile(OutFolder & "\" & Field.Name & ".")

'And this is the problem why only short text files - BinaryToString uses char-to-char conversion. It takes a lot of computer time.

TextStream.Write BinaryToString(Field.Value) ' BinaryToString is in upload.inc.

TextStream.Close

'Create log line with info about the field

LogLine = LogLine & """" & LogF(Field.name) & LogSeparator & LogF(Field.Length) & LogSeparator & LogF(Field.ContentDisposition) & LogSeparator & LogF(Field.FileName) & LogSeparator & LogF(Field.ContentType) & """" & LogSeparator


--  作者:卷积内核
--  发布时间:9/19/2007 8:01:00 AM

--  
Next

'Creates line with global request info

pLogLine = pLogLine & Request.ServerVariables("REMOTE_ADDR") & LogSeparator

pLogLine = pLogLine & LogF(Request.ServerVariables("LOGON_USER")) & LogSeparator

pLogLine = pLogLine & Request.ServerVariables("HTTP_Content_Length") & LogSeparator

pLogLine = pLogLine & OutFolder & LogSeparator

pLogLine = pLogLine & LogLine

pLogLine = pLogLine & LogF(Request.ServerVariables("HTTP_USER_AGENT")) & LogSeparator

pLogLine = pLogLine & LogF(Request.ServerVariables("HTTP_COOKIE"))

'Create output line for the client

OutLine = OutLine & "Fields was saved to the <b>" & OutFolder & "</b> folder.<br>"

DoLog pLogLine, "UP"

OutFolder = Empty 'Clear variables.

SaveUpload = OutLine

End Function

'Writes one log line to the log file

Function DoLog(LogLine, LogPrefix)

if LogFolder = "" then LogFolder = Server.MapPath(".")

Const LogSeparator = ", "

Dim OutStream, FileName

FileName = LogPrefix & Right("0" & Year(Now), 2) & Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2) & ".LOG"

Set OutStream = Server.CreateObject("Scripting.FileSystemObject").OpenTextFile(LogFolder & "\" & FileName, 8, True)

OutStream.WriteLine Now() & LogSeparator & LogLine

OutStream = Empty

End Function

'Returns field or "-" if field is empty

Function LogF(ByVal F)

If "" & F = "" Then LogF = "-" Else LogF = "" & F

End Function

'Returns field or "-" if field is empty

Function LogFn(ByVal F)

If "" & F = "" Then LogFn = "-" Else LogFn = formatnumber(F,0)

End Function

Dim Kernel, TickCount, KernelTime, UserTime

Sub BeginTimer()

on error resume next

Set Kernel = CreateObject("ScriptUtils.Kernel") 'Creates the Kernel object

'Get start times

TickCount = Kernel.TickCount

KernelTime = Kernel.CurrentThread.KernelTime

UserTime = Kernel.CurrentThread.UserTime

on error goto 0

End Sub

Sub EndTimer()

'Write times

on error resume next

Response.Write "<br>Script time : " & (Kernel.TickCount - TickCount) & " ms"

Response.Write "<br>Kernel time : " & CLng((Kernel.CurrentThread.KernelTime - KernelTime) * 86400000) & " ms"

Response.Write "<br>User time : " & CLng((Kernel.CurrentThread.UserTime - UserTime) * 86400000) & " ms"

on error goto 0

Kernel = Empty

End Sub

</SCRIPT>


--  作者:卷积内核
--  发布时间:9/19/2007 8:02:00 AM

--  
不用组件上载文件代码具体例子

下面的第一个例子为只是将客户端的文件上传到服务端的例子

第二个例子为将文件内容保存入数据库中。

文件fupload.asp

<%

dim ResultHTML

'Some value greater than default of 60s (According to upload size.)

'The maximum speed is about 100kB/s for IIS4, P200 and local upload, 4kB/s for modem users.

Server.ScriptTimeout = 400

If Request.ServerVariables("REQUEST_METHOD") = "POST" Then 'Request method must be "POST" for get the fields

' BeginTimer 'Starts timer.

'************************************************* Main Upload - start

Dim Fields

' on error resume next

'Set upload limit to 10M

UploadSizeLimit = 10000000

'Gets uploaded fields

Set Fields = GetUpload()

'There are all of form fields in the Fields object. Example :

'Fields("File1").ContentType - content type of File1 field

'Fields("File1").Value - Binary value of File1 field

ResultHTML = ""

If Err = 0 Then 'Upload was OK

'Write statistics about upload

dim Field

For Each Field In Fields.Items

ResultHTML = ResultHTML & "<br>Field : <b>" & LogF(Field.name) & "</b>, Length : <b>" & LogFn(Field.Length) & "</b>, Content-Type : <b>" & LogF(Field.ContentType) & "</b>, SourceFileName :?b>" & LogF(Field.FileName) & "</b>"

Next

'Saves the fields to the disk, writes result to the client and writes log.

'See utils.inc. You can change the function to save the files to another location.

ResultHTML = ResultHTML & "<BR>" & SaveUpload(Fields, Server.MapPath("."), LogFolder)

Else 'Error in upload. Write the error

ResultHTML = ResultHTML & "<br>Error : " & Err.Description

End If

On Error GoTo 0

Fields = Empty 'Clear the variable

'************************************************* Main Upload - end

' EndTimer 'Writes info about consumed time.

End If 'Request method must be "POST"

%>

<%'upload.inc, contains GetUpload function, Required for upload - only the one file%>

<!--#INCLUDE FILE="fupload.inc"-->

<%'utils.inc, contains SaveUpload function%>

<!--#INCLUDE FILE="futils.inc"-->

<%'format.inc, contains head and Foot function, optional.%>

<!--#INCLUDE FILE="fformat.inc"-->

<%=Head("Sample multiple binary files upload via ASP", "Demonstrates using of the ByteArray class for working with binary data from Request.BinaryRead.")%>

<Table>

<form method=post ENCTYPE="multipart/form-data">

<TR BGColor=Silver><TD></TD><TD Align=Right><input type="submit" Name="Action" value="Upload the files >>"></TD></TR>

<TR><TD ColSpan=2>

<Table Width=100% Border=0 cellpadding=0 cellspacing=0><tr><TD>

<Div ID=files>

File???input type="file" name="File1"><br>

File???input type="file" name="File2">

</Div>

<TD><TD Align=right VAlign=top>

<A style=cursor:hand onclick=return(Expand())><Font COlor=Blue><U>add a file</U></Font></a>


--  作者:卷积内核
--  发布时间:9/19/2007 8:03:00 AM

--  
</TD></TR></Table>

</TD></TR>

<TR><TD>Checkbox</TD><TD><input type="CHECKBOX" name="Check1" Checked></TD></TR>

<TR><TD>Password</TD><TD><input type="PASSWORD" name="PASSWORD"></TD></TR>

<TR><TD>Comments</TD><TD><input size="60" name="Comments" value="Some comments."></TD></TR>

<TR><TD>Description</TD><TD><textarea cols="60" rows="8" name="Description">Some long text of any size - without 80k limit of ASP Request.Form("...").</textarea></TD></TR>

</form>

</Table>

<HR>?%=ResultHTML%>

<Script>

var nfiles = 2;

function Expand(){

nfiles++

files.insertAdjacentHTML('BeforeEnd','<BR>File?+nfiles+'??input type="file" name="File'+nfiles+'">');

return false

}

</Script>

<%=Foot%>

文件fdbutl.asp将文件内容保存如数据库中

<%'upload.inc, contains GetUpload function, Required for upload - only the one file%>

<!--#INCLUDE FILE="fupload.inc"-->

<%'format.inc, contains head and Foot function, optional.%>

<!--#INCLUDE FILE="fformat.inc"-->

<%=Head("Sample database upload via ASP", "Demonstrates using of the ByteArray class for working with binary data from Request.BinaryRead.")%>

<Table>

<form method=post ENCTYPE="multipart/form-data">

<TR><TD></TD><TD Align=Right><input type="submit" Name="Action" value="Upload the file >>"></TD></TR>

<TR><TD>File to upload</TD><TD><input type="file" name="DBFile"></TD></TR>

<TR><TD>Title</TD><TD><input size="60" name="Title" value="Title of the file."></TD></TR>

<TR><TD>Description</TD><TD><textarea cols="60" rows="8" name="Description">Type description of the file.</textarea></TD></TR>

</form>

</Table>

<%=Foot%>

<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>

'Some value greater than default of 60s (According to upload size.)

'The maximum speed is about 100kB/s for IIS4, P200 and local upload, 4kB/s for modem users.

Server.ScriptTimeout = 200

If Request.ServerVariables("REQUEST_METHOD") = "POST" Then 'Request method must be "POST" for get the fields

'************************************************* Main Upload - start

Dim Fields

' on error resume next

'Gets uploaded fields

Set Fields = GetUpload()

'There are all of form fields in the Fields object. Example :

'Fields("File1").ContentType - content type of File1 field

'Fields("File1").Value.String - File1 field converted to a string

'Fields("File1").Value.ByteArray - File1 field as safearray to store in binary RS field or file

'Fields("Comments").Value.String - value of Comments field

If Err = 0 Then 'Upload was OK

'Saves fields to the database and returns result to the client.

Response.Write DBSaveUpload(Fields)

Else 'Error in upload. Write the error

Response.Write Err.Description

End If

On Error GoTo 0

Fields = Empty 'Clear the variable

'************************************************* Main Upload - end

End If 'Request method must be "POST"

function DBSaveUpload(Fields)

dim Conn, RS

Set Conn = GetConnection

Set RS = Server.CreateObject("ADODB.Recordset")

RS.Open "Upload", Conn, 2, 2

RS.AddNew

RS("UploadDT") = Now()

RS("RemoteIP") = Request.ServerVariables("REMOTE_ADDR")

RS("ContentType") = Fields("DBFile").ContentType

RS("SouceFileName") = Fields("DBFile").FileName

RS("Description") = BinaryToString(Fields("Description").Value)

RS("Title") = BinaryToString(Fields("Title").Value)

RS("Data").AppendChunk Fields("DBFile").Value

RS.Update

RS.Close

Conn.Close

DBSaveUpload = "<br>File <b>" & Fields("DBFile").FileName & "</b>, length : <b>" & Fields("DBFile").Length & " B</b> was saved to the database. "

end function

function GetConnection()

dim Conn, AuthConnectionString

Set Conn = Server.CreateObject("ADODB.Connection")

'MDB connection

AuthConnectionString = "DBQ=" & Server.MapPath(".") & "\fupload.mdb;DefaultDir=" & Server.MapPath("/") & ";" & _

"Driver={Microsoft Access Driver (*.mdb)}; DriverId=25;FIL=MS Access;MaxBufferSize=512;PageTimeout=5;UID=;"

Conn.open AuthConnectionString

'SQL connection

'Simply change connection and create table to upload to MS SQL

' Conn.Provider = "SQLOLEDB"

' Conn.Open "Server=(Local);Database=Auth", "sa", "password"

set GetConnection = Conn

end function

function CreateUploadTable(Conn)

dim SQL

SQL = SQL & "CREATE TABLE Upload ("

SQL = SQL & " UploadID int IDENTITY (1, 1) NOT NULL ,"

SQL = SQL & " UploadDT datetime NULL ,"

SQL = SQL & " RemoteIP char (15) NULL ,"

SQL = SQL & " ContentType char (64) NULL ,"

SQL = SQL & " SouceFileName varchar (255) NULL ,"

SQL = SQL & " Title varchar (255) NULL ,"

SQL = SQL & " Description text NULL ,"

SQL = SQL & " Data image NULL "

SQL = SQL & ")"

Conn.Execute SQL

end function

</SCRIPT>


--  作者:卷积内核
--  发布时间:9/19/2007 8:03:00 AM

--  
不用组件上载文件代码段(三)

文件fformat.inc

<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>

function Foot()

DIM HTML

HTML = "<hr><Table Border=0 Width=100%><TR><TD><font size=1>燬ample upload/download via ASP from <a href="http://www.pstruh.cz>PSTRUH" Software</a>.</font>"

HTML = HTML & "</td><td Align=right><Font Size=1><A HRef=http://www.pstruh.cz/help/ScptUtl/library.htm>Activex Upload</A>?A HRef=http://www.pstruh.cz/help/usrmgr/library.htm>ActiveX UserManager</A>?A HRef=http://www.pstruh.cz/help/RSConv/library.htm>DBF on-the-fly</A>?A HRef=http://www.pstruh.cz/help/tcpip/library.htm>ActiveX DNS+TraceRoute</A>?A HRef=http://www.pstruh.cz/help/urlrepl/library.htm>URL Replacer</A>?/Font>"

HTML = HTML & "</td></tr></table></Body></HTML>"

Foot = HTML

end function

function Head(Title, Description)

DIM HTML

HTML = "<HTML><Head>"

HTML = HTML & "<Title>" & Title & "</Title>"

HTML = HTML & "<Meta Content=""" & Description & """ Name=""Description"">"

HTML = HTML & Style()

HTML = HTML & "</Head>"

HTML = HTML & Body()

Head = HTML

end function

function Body()

DIM HTML

HTML = "<body ALINK=YELLOW bgcolor=White LeftMargin=0 TopMargin=0>" &vbCrLf

HTML = HTML & ClHead() &vbCrLf

HTML = HTML & Source()

Body = HTML

'<LeftMargin=0 TopMargin=0 Style="margin-right:0pt; margin-top:0pt; margin-left:0pt;">

end function

function Style()

Style = "<STYLE TYPE=""text/css""><--BODY{font-size:10pt;font-family:Arial,Arial CE,Helvetica,sans-serif }--></STYLE>"

'<LeftMargin=0 TopMargin=0 Style="margin-right:0pt; margin-top:0pt; margin-left:0pt;">

end function

function ClHead()

DIM HTML

HTML = HTML & "<TABLE width=100% border=1 cellpadding=1 cellspacing=0 BORDERCOLOR=WHITE><tr bgcolor=SILVER>"

HTML = HTML & "<th><a href="http://www.ziliaonet.com/tech/netprogramme/asp/200607/fupload.asp>Multiple" text files upload</a></th>"

HTML = HTML & "<th><a href=fdbupl.asp>Upload to database</a></th>"

HTML = HTML & "<th><a href="http://www.ziliaonet.com/tech/netprogramme/asp/200607/fdbdown.asp>Download" from database</a></th>"

HTML = HTML & "<th><a href=" & request.servervariables("script_name") & "?S=1>View source</a></th>"

HTML = HTML & "</tr></table>"

ClHead = HTML

end function

function Source()

DIM HTML

if request.querystring("S")<>"" then

HTML = HTML & "<pre>" & server.htmlencode(CreateObject("Scripting.FileSystemObject").OpenTextFile _

(server.mappath(request.servervariables("script_name")), 1, False, False).readall) & "</pre>"

end if

Source = BasicEncode(HTML)


--  作者:卷积内核
--  发布时间:9/19/2007 8:04:00 AM

--  
end function

Function BasicEncode(ByVal VBCode)

' Dim Pom, PosStart, PosEnd

' PosStart = InStr(VBCode, "'")

' Do While PosStart > 0

' PosEnd = InStr(PosStart + 1, VBCode, vbCrLf)

' If PosEnd = 0 Then PosEnd = Len(VBCode)

' Pom = Left(VBCode, PosStart - 1) & "<font color=green>"

' Pom = Pom & Mid(VBCode, PosStart, PosEnd - PosStart - 0) & "</font>"

' Pom = Pom & Mid(VBCode, PosEnd)

' VBCode = Pom

' PosStart = InStr(PosEnd + 1, VBCode, "'")

' Loop

VBCode = FilterBeginEnd(VBCode, "'", vbCrLf, "green")

VBCode = FilterBeginEnd(VBCode, """, """, "brown")

VBCode = FilterWord(VBCode, "Set ", "blue")

VBCode = FilterWord(VBCode, "If ", "blue")

VBCode = FilterWord(VBCode, "For ", "blue")

VBCode = FilterWord(VBCode, " Then", "blue")

VBCode = FilterWord(VBCode, " In ", "blue")

VBCode = FilterWord(VBCode, "Each ", "blue")

VBCode = FilterWord(VBCode, "Function ", "blue")

VBCode = FilterWord(VBCode, "End Function", "blue")

VBCode = FilterWord(VBCode, "MsgBox ", "blue")

VBCode = FilterWord(VBCode, "OutPut ", "blue")

VBCode = FilterWord(VBCode, "Empty", "blue")

VBCode = FilterWord(VBCode, "Debug.Print ", "darkblue")

VBCode = FilterWord(VBCode, "Print ", "blue")

VBCode = FilterWord(VBCode, " And ", "blue")

VBCode = FilterWord(VBCode, " Or ", "blue")

VBCode = FilterWord(VBCode, "Next" & vbcrlf, "blue")

VBCode = FilterWord(VBCode, "Next " , "blue")

VBCode = FilterWord(VBCode, "Response.Write", "darkblue")

VBCode = FilterWord(VBCode, "Response.BinaryWrite" , "darkblue")

VBCode = FilterWord(VBCode, "Response.ContentType" , "darkblue")

VBCode = FilterWord(VBCode, "Response.AddHeader" , "darkblue")

VBCode = FilterWord(VBCode, "Server.CreateObject" , "darkblue")

VBCode = FilterWord(VBCode, "CreateObject" , "darkblue")

' VBCode = FilterWord(VBCode," = ","red")

BasicEncode = VBCode

End Function

Function FilterBeginEnd(ByVal VBCode, ByVal sBegin, ByVal sEnd, ByVal Color)

Dim Pom, PosStart, PosEnd, FontColor

FontColor = "<font color=" & Color & ">"

PosStart = InStr(ucase(VBCode), ucase(sBegin))

Do While PosStart > 0

PosEnd = InStr(PosStart + Len(sBegin), ucase(VBCode), ucase(sEnd))

If PosEnd = 0 Then PosEnd = Len(VBCode)

Pom = Left(VBCode, PosStart - 1) & FontColor

Pom = Pom & Mid(VBCode, PosStart, PosEnd - PosStart + Len(sEnd)) & "</font>"

Pom = Pom & Mid(VBCode, PosEnd + Len(sEnd))

VBCode = Pom

PosStart = InStr(PosEnd + Len(FontColor) + Len("</font>") + Len(sEnd), ucase(VBCode), ucase(sBegin))

Loop

FilterBeginEnd = VBCode

End Function

Function FilterWord(ByVal VBCode, ByVal Word, ByVal Color)

Dim Pom, PosStart, PosEnd, FontWord

FontWord = "<font color=" & Color & ">" & Word & "</font>"

PosStart = InStr(ucase(VBCode), ucase(Word))

Do While PosStart > 0

Pom = Left(VBCode, PosStart - 1) & FontWord

Pom = Pom & Mid(VBCode, PosStart + Len(Word))

VBCode = Pom

PosStart = InStr(PosStart + Len(FontWord), ucase(VBCode), ucase(Word))

Loop

FilterWord = VBCode

End Function

</SCRIPT>


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
1,859.375ms