请简述ASP工作原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请简述ASP工作原理相关的知识,希望对你有一定的参考价值。

网络信息技术课程里的问题

ASP是动态服务器页面(Active Server Page)的英文缩写,是一种简单、方便的编程工具,ASP的网页文件的格式是 .asp,现在常用于各种动态网站中。



ASP工作原理如下:

1.访问html页面:

  输入HTML文件的URL地址,向网络发送一个网页请求;

  根据URL找到相应的Web服务器;

  Web服务器收到请求,通过扩展名.htm或.html判断是否为HTML文件的请求;

  Web服务器将对应的HTML文件从磁盘或存储器中取出并送回浏览器;

  HTML文件由用户的浏览器解释,结果在浏览器窗口中显示出来;

2.访问ASP页面:

  当用户请求一个*.asp页面时,该请求通过网络被发送到相应的Web服务器;

  Web服务器响应该HTTP请求,并根据扩展名.asp识别出ASP文件,从硬盘或内存中获取相应的ASP文件;

  Web服务器将ASP文件发送到脚本引擎(asp.dll)文件中,脚本引擎将ASP文件从头到尾进行解释处理,并根据ASP文件中的脚本命令生成相应的HTML网页;

  若ASP文件中含有访问数据库的请求,就通过数据库连接组件与后台数据库相连。ASP脚本是在服务器端解释执行的,他依据访问数据库的结果集自动生成符合HTML语言的页面,以响应用户的请求。所有相关的工作由Web服务器负责。

参考技术A ASP是动态服务器页面(Active Server Page)的英文缩写,是一种简单、方便的编程工具,ASP的网页文件的格式是 .asp,现在常用于各种动态网站中。
ASP工作原理如下:

1.访问Html页面:
输入HTML文件的URL地址,向网络发送一个网页请求;
根据URL找到相应的Web服务器;
Web服务器收到请求,通过扩展名.htm或.html判断是否为HTML文件的请求;
Web服务器将对应的HTML文件从磁盘或存储器中取出并送回浏览器;
HTML文件由用户的浏览器解释,结果在浏览器窗口中显示出来;
2.访问ASP页面:
当用户请求一个*.asp页面时,该请求通过网络被发送到相应的Web服务器;
Web服务器响应该HTTP请求,并根据扩展名.asp识别出ASP文件,从硬盘或内存中获取相应的ASP文件;
Web服务器将ASP文件发送到脚本引擎(asp.dll)文件中,脚本引擎将ASP文件从头到尾进行解释处理,并根据ASP文件中的脚本命令生成相应的HTML网页;
若ASP文件中含有访问数据库的请求,就通过数据库连接组件与后台数据库相连。ASP脚本是在服务器端解释执行的,他依据访问数据库的结果集自动生成符合HTML语言的页面,以响应用户的请求。所有相关的工作由Web服务器负责。
参考技术B ASP工作流程如下:
用户在地址栏中请求一个asp程序。
浏览器向ASP服务器请求这个asp程序,而不是像html一样直接处理一个自身的html程序,不需要在服务器上的运行。
ASP程序中的服务器端脚本开始运行。
ASP程序连续的执行这个请求文件中的所有语句,然后生成一个HTML文件。
结果是,100%的纯HTML代码发送到客户端,所以我们在客户端看到的代码还是HTML,并不是ASP的源代码。这样做,就可以很少地考虑IE和Netscape 之间的区别了,而且我们也不怕别人看到我们的源代码!不过,我们只是不能看到ASP的源程序而已,还是有些程序可以被看到,比如XML,嘿嘿,我们就可以看个够了!

FileCloud 的原理简述&自己搭建文件云

FileCloud 的原理简述&自己搭建文件云

copyright(c) by zcy

关于如何使用IIS创建asp服务,请读者自行研究

代码的存储:

  • 根目录

    • filecloudEV.html 提前验证

    • filecloudEV.aspx 判断密码是否正确

    • filecloudMAIN.aspx 主界面

    • UpLoad.asp 上传界面

    • SaveFile.asp 保存文件

    • InputFilename.aspx 让用户输入文件名

    • AddPath.aspx 将当前文件加入文件清单

    • clsField.asp 文件上传的底层支持代码

    • clsUpload.asp 文件上传的底层支持代码

    • DownLoad.aspx 下载界面

    • list.txt 用户上传的文件的清单

    • files 用户上传的文件的储存文件夹

用户首先是进入filecloudEV.html进行验证:

<html>
    <head>
        <title>filecloud early verification</title>
        <meta charset="UTF-8"></meta>
    </head>
    <body>
        <form action="filecloudEV.aspx" method="post">
            <center>
                <p style="font-size:50px;">Password</p>
                <input type="password" name="password" style="font-size:50px;"></input>
                <input type="submit" value="Submit" style="font-size:50px;"></input>
            </center>
        </form>
    </body>
</html> 

 

一个文本框,将用户输入的密码传到filecloudEV.aspx里面去

filecloudEV.aspx

<html>
    <head>
        <title>filecloud early verification</title>
        <meta charset="UTF-8"></meta>
    </head>
    <body>
        <%
            dim a
            a=Request.Form("password")
            response.write("<center><p style=""font-size:30px"">")
            if a="XXXXXXX" then 验证密码是否正确
                response.write("Password is right!")%>
        <form action="filecloudMAIN.aspx" method="post"><!--只有正确才显示这个跳转按钮-->
            <input type="submit" value="跳转" style="font-size:30px"></input>
        </form>
        <%
            else
                response.write("Password is wrong!")
                response.write("Please go back")
            end if
            response.write("</p></center>")
        %>
    </body>
</html>

 

然后进入主界面:

filecloudMAIN.aspx

<html>
    <head>
        <title>FilecloudMAIN</title>
        <meta charset="UTF-8"></meta>
    </head>
    <body>
        <center>
            <a href="./UpLoad.asp" style="font-size:50px">UpLoad</a><br /><br />
            <a href="./DownLoad.aspx" style="font-size:50px">DownLoad</a><br /><br />
        </center>
    </body>
</html>

 

其实就只是显示了两个超链接:

先来介绍一下上传:

UpLoad.asp

<html>
    <head>
        <title>UpLoad</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <form method="post" encType="multipart/form-data" action="SaveFile.asp">
            <input type="File" name="File1">
            <input type="Submit" value="Upload">
        </form> 
    </body>
</html>

 

把文件流传到SaveFile.asp中

SaveFile.asp

<!--#INCLUDE FILE="clsUpload.asp"--> <!--引用clsUpLoad.asp-->
<html>
    <head>
        <title>SaveFile</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <%
            Dim Upload
            Dim Folder
            Set Upload = New clsUpload
            Folder = Server.MapPath("Uploads") & "" 绑定储存文件的路径
            Upload("File1").SaveAs Folder & Upload("File1").FileName 保存文件
            Set Upload = Nothing      
            Response.Write("<script>alert(‘UpLoad Success!‘);window.location.href=‘InputFilename.aspx‘</script>") 跳转到InputFilename.aspx
        %>
    </body>
</html>

 

接下来介绍一下clsUpload.asp

声明:这个文件以及下面的clsField.asp都是我从Stack Overflow中找到的

clsUpload.asp

<!--METADATA
  TYPE="TypeLib"
  NAME="Microsoft ActiveX Data Objects 2.5 Library"
  UUID="{00000205-0000-0010-8000-00AA006D2EA4}"
  VERSION="2.5"
-->
<!--#INCLUDE FILE="clsField.asp"-->
?
<%
 ------------------------------------------------------------------------------   Author:     Lewis Moten   Date:       March 19, 2002 ------------------------------------------------------------------------------
?
 Upload class retrieves multi-part form data posted to web page and parses it into objects that are easy to interface with. Requires MDAC (ADODB) COM components found on most servers today Additional compenents are not necessary.?
Class clsUpload
 ------------------------------------------------------------------------------
?
    Private mbinData             bytes visitor sent to server
    Private mlngChunkIndex       byte where next chunk starts
    Private mlngBytesReceived    length of data
    Private mstrDelimiter        Delimiter between multipart/form-data (43 chars)
?
    Private CR                   ANSI Carriage Return
    Private LF                   ANSI Line Feed
    Private CRLF                 ANSI Carriage Return & Line Feed
?
    Private mobjFieldAry()       Array to hold field objects
    Private mlngCount            Number of fields parsed
?
 ------------------------------------------------------------------------------
    Private Sub RequestData
?
        Dim llngLength       Number of bytes received
?
         Determine number bytes visitor sent
        mlngBytesReceived = Request.TotalBytes
?
         Store bytes recieved from visitor
        mbinData = Request.BinaryRead(mlngBytesReceived)
?
    End Sub
 ------------------------------------------------------------------------------
    Private Sub ParseDelimiter()
?
         Delimiter seperates multiple pieces of form data
             "around" 43 characters in length
             next character afterwards is carriage return (except last line has two --)
             first part of delmiter is dashes followed by hex number
             hex number is possibly the browsers session id?
?
         Examples:
?
         -----------------------------7d230d1f940246
         -----------------------------7d22ee291ae0114
?
        mstrDelimiter = MidB(mbinData, 1, InStrB(1, mbinData, CRLF) - 1)
?
    End Sub
 ------------------------------------------------------------------------------
    Private Sub ParseData()
?
         This procedure loops through each section (chunk) found within the
         delimiters and sends them to the parse chunk routine
?
        Dim llngStart    start position of chunk data
        Dim llngLength   Length of chunk
        Dim llngEnd      Last position of chunk data
        Dim lbinChunk    Binary contents of chunk
?
         Initialize at first character
        llngStart = 1
?
         Find start position
        llngStart = InStrB(llngStart, mbinData, mstrDelimiter & CRLF)
?
         While the start posotion was found
        While Not llngStart = 0
?
             Find the end position (after the start position)
            llngEnd = InStrB(llngStart + 1, mbinData, mstrDelimiter) - 2
?
             Determine Length of chunk
            llngLength = llngEnd - llngStart
?
             Pull out the chunk
            lbinChunk = MidB(mbinData, llngStart, llngLength)
?
             Parse the chunk
            Call ParseChunk(lbinChunk)
?
             Look for next chunk after the start position
            llngStart = InStrB(llngStart + 1, mbinData, mstrDelimiter & CRLF)
?
        Wend
?
    End Sub
 ------------------------------------------------------------------------------
    Private Sub ParseChunk(ByRef pbinChunk)
?
         This procedure gets a chunk passed to it and parses its contents.
         There is a general format that the chunk follows.
?
         First, the deliminator appears
?
         Next, headers are listed on each line that define properties of the chunk.
?
           Content-Disposition: form-data: name="File1"; filename="C:Photo.gif"
           Content-Type: image/gif
?
         After this, a blank line appears and is followed by the binary data.
?
        Dim lstrName             Name of field
        Dim lstrFileName         File name of binary data
        Dim lstrContentType      Content type of binary data
        Dim lbinData             Binary data
        Dim lstrDisposition      Content Disposition
        Dim lstrValue            Value of field
?
         Parse out the content dispostion
        lstrDisposition = ParseDisposition(pbinChunk)
?
             And Parse the Name
            lstrName = ParseName(lstrDisposition)
?
             And the file name
            lstrFileName = ParseFileName(lstrDisposition)
?
         Parse out the Content Type
        lstrContentType = ParseContentType(pbinChunk)
?
         If the content type is not defined, then assume the
         field is a normal form field
        If lstrContentType = "" Then
?
             Parse Binary Data as Unicode
            lstrValue = CStrU(ParseBinaryData(pbinChunk))
?
         Else assume the field is binary data
        Else
?
             Parse Binary Data
            lbinData = ParseBinaryData(pbinChunk)
?
        End If
?
         Add a new field
        Call AddField(lstrName, lstrFileName, lstrContentType, lstrValue, lbinData)
?
    End Sub
 ------------------------------------------------------------------------------
    Private Sub AddField(ByRef pstrName, ByRef pstrFileName, ByRef pstrContentType, ByRef pstrValue, ByRef pbinData)
?
        Dim lobjField        Field object class
?
         Add a new index to the field array
         Make certain not to destroy current fields
        ReDim Preserve mobjFieldAry(mlngCount)
?
         Create new field object
        Set lobjField = New clsField
?
         Set field properties
        lobjField.Name = pstrName
        lobjField.FilePath = pstrFileName               
        lobjField.FileName = Mid(pstrFileName, InStrRev(pstrFileName, "") + 1)  <= line added to set the file name
        lobjField.ContentType = pstrContentType
?
         If field is not a binary file
        If LenB(pbinData) = 0 Then
?
            lobjField.BinaryData = ChrB(0)
            lobjField.Value = pstrValue
            lobjField.Length = Len(pstrValue)
?
         Else field is a binary file
        Else
?
            lobjField.BinaryData = pbinData
            lobjField.Length = LenB(pbinData)
            lobjField.Value = ""
?
        End If
?
         Set field array index to new field
        Set mobjFieldAry(mlngCount) = lobjField
?
         Incriment field count
        mlngCount = mlngCount + 1
?
    End Sub
 ------------------------------------------------------------------------------
    Private Function ParseBinaryData(ByRef pbinChunk)
?
         Parses binary content of the chunk
?
        Dim llngStart    Start Position
?
         Find first occurence of a blank line
        llngStart = InStrB(1, pbinChunk, CRLF & CRLF)
?
         If it doesn‘t exist, then return nothing
        If llngStart = 0 Then Exit Function
?
         Incriment start to pass carriage returns and line feeds
        llngStart = llngStart + 4
?
         Return the last part of the chunk after the start position
        ParseBinaryData = MidB(pbinChunk, llngStart)
?
    End Function
 ------------------------------------------------------------------------------
    Private Function ParseContentType(ByRef pbinChunk)
?
         Parses the content type of a binary file.
           example: image/gif is the content type of a GIF image.
?
        Dim llngStart    Start Position
        Dim llngEnd      End Position
        Dim llngLength   Length
?
         Fid the first occurance of a line starting with Content-Type:
        llngStart = InStrB(1, pbinChunk, CRLF & CStrB("Content-Type:"), vbTextCompare)
?
         If not found, return nothing
        If llngStart = 0 Then Exit Function
?
         Find the end of the line
        llngEnd = InStrB(llngStart + 15, pbinChunk, CR)
?
         If not found, return nothing
        If llngEnd = 0 Then Exit Function
?
         Adjust start position to start after the text "Content-Type:"
        llngStart = llngStart + 15
?
         If the start position is the same or past the end, return nothing
        If llngStart >= llngEnd Then Exit Function
?
         Determine length
        llngLength = llngEnd - llngStart
?
         Pull out content type
         Convert to unicode
         Trim out whitespace
         Return results
        ParseContentType = Trim(CStrU(MidB(pbinChunk, llngStart, llngLength)))
?
    End Function
 ------------------------------------------------------------------------------
    Private Function ParseDisposition(ByRef pbinChunk)
?
         Parses the content-disposition from a chunk of data
                 Example:
                   Content-Disposition: form-data: name="File1"; filename="C:Photo.gif"
                   Would Return:
               form-data: name="File1"; filename="C:Photo.gif"
?
        Dim llngStart    Start Position
        Dim llngEnd      End Position
        Dim llngLength   Length
?
         Find first occurance of a line starting with Content-Disposition:
        llngStart = InStrB(1, pbinChunk, CRLF & CStrB("Content-Disposition:"), vbTextCompare)
?
         If not found, return nothing
        If llngStart = 0 Then Exit Function
?
         Find the end of the line
        llngEnd = InStrB(llngStart + 22, pbinChunk, CRLF)
?
         If not found, return nothing
        If llngEnd = 0 Then Exit Function
?
         Adjust start position to start after the text "Content-Disposition:"
        llngStart = llngStart + 22
?
         If the start position is the same or past the end, return nothing
        If llngStart >= llngEnd Then Exit Function
?
         Determine Length
        llngLength = llngEnd - llngStart
?
         Pull out content disposition
         Convert to Unicode
         Return Results
        ParseDisposition = CStrU(MidB(pbinChunk, llngStart, llngLength))
?
    End Function
 ------------------------------------------------------------------------------
    Private Function ParseName(ByRef pstrDisposition)
?
         Parses the name of the field from the content disposition
                 Example
                   form-data: name="File1"; filename="C:Photo.gif"
                   Would Return:
               File1
?
        Dim llngStart    Start Position
        Dim llngEnd      End Position
        Dim llngLength   Length
?
         Find first occurance of text name="
        llngStart = InStr(1, pstrDisposition, "name=""", vbTextCompare)
?
         If not found, return nothing
        If llngStart = 0 Then Exit Function
?
         Find the closing quote
        llngEnd = InStr(llngStart + 6, pstrDisposition, """")
?
         If not found, return nothing
        If llngEnd = 0 Then Exit Function
?
         Adjust start position to start after the text name="
        llngStart = llngStart + 6
?
         If the start position is the same or past the end, return nothing
        If llngStart >= llngEnd Then Exit Function
?
         Determine Length
        llngLength = llngEnd - llngStart
?
         Pull out field name
         Return results
        ParseName = Mid(pstrDisposition, llngStart, llngLength)
?
    End Function
 ------------------------------------------------------------------------------
    Private Function ParseFileName(ByRef pstrDisposition)
         Parses the name of the field from the content disposition
                 Example
                   form-data: name="File1"; filename="C:Photo.gif"
                   Would Return:
               C:Photo.gif
?
        Dim llngStart    Start Position
        Dim llngEnd      End Position
        Dim llngLength   Length
?
         Find first occurance of text filename="
        llngStart = InStr(1, pstrDisposition, "filename=""", vbTextCompare)
?
         If not found, return nothing
        If llngStart = 0 Then Exit Function
?
         Find the closing quote
        llngEnd = InStr(llngStart + 10, pstrDisposition, """")
?
         If not found, return nothing
        If llngEnd = 0 Then Exit Function
?
         Adjust start position to start after the text filename="
        llngStart = llngStart + 10
?
         If the start position is the same of past the end, return nothing
        If llngStart >= llngEnd Then Exit Function
?
         Determine length
        llngLength = llngEnd - llngStart
?
         Pull out file name
         Return results
        ParseFileName = Mid(pstrDisposition, llngStart, llngLength)
?
    End Function
 ------------------------------------------------------------------------------
    Public Property Get Count()
?
         Return number of fields found
        Count = mlngCount
?
    End Property
 ------------------------------------------------------------------------------
?
    Public Default Property Get Fields(ByVal pstrName)
?
        Dim llngIndex    Index of current field
?
         If a number was passed
        If IsNumeric(pstrName) Then
?
            llngIndex = CLng(pstrName)
?
             If programmer requested an invalid number
            If llngIndex > mlngCount - 1 Or llngIndex < 0 Then
                 Raise an error
                Call Err.Raise(vbObjectError + 1, "clsUpload.asp", "Object does not exist within the ordinal reference.")
                Exit Property
            End If
?
             Return the field class for the index specified
            Set Fields = mobjFieldAry(pstrName)
?
         Else a field name was passed
        Else
?
             convert name to lowercase
            pstrName = LCase(pstrname)
?
             Loop through each field
            For llngIndex = 0 To mlngCount - 1
?
                 If name matches current fields name in lowercase
                If LCase(mobjFieldAry(llngIndex).Name) = pstrName Then
?
                     Return Field Class
                    Set Fields = mobjFieldAry(llngIndex)
                    Exit Property
?
                End If
?
            Next
?
        End If
?
         If matches were not found, return an empty field
        Set Fields = New clsField
?
       ‘ ERROR ON NonExistant:       ‘ If matches were not found, raise an error of a non-existent field       Call Err.Raise(vbObjectError + 1, "clsUpload.asp", "Object does not exist within the ordinal reference.")       Exit Property
?
    End Property
 ------------------------------------------------------------------------------
    Private Sub Class_Terminate()
?
         This event is called when you destroy the class.
                 Example:
           Set objUpload = Nothing
                 Example:
           Response.End
                 Example:
           Page finnishes executing ...
?
        Dim llngIndex    Current Field Index
?
         Loop through fields
        For llngIndex = 0 To mlngCount - 1
?
             Release field object
            Set mobjFieldAry(llngIndex) = Nothing
?
        Next
?
         Redimension array and remove all data within
        ReDim mobjFieldAry(-1)
?
    End Sub
 ------------------------------------------------------------------------------
    Private Sub Class_Initialize()
?
         This event is called when you instantiate the class.
                 Example:
           Set objUpload = New clsUpload
?
         Redimension array with nothing
        ReDim mobjFieldAry(-1)
?
         Compile ANSI equivilants of carriage returns and line feeds
?
        CR = ChrB(Asc(vbCr))     vbCr      Carriage Return
        LF = ChrB(Asc(vbLf))     vbLf      Line Feed
        CRLF = CR & LF           vbCrLf    Carriage Return & Line Feed
?
         Set field count to zero
        mlngCount = 0
?
         Request data
        Call RequestData
?
         Parse out the delimiter
        Call ParseDelimiter()
?
         Parse the data
        Call ParseData
?
    End Sub
 ------------------------------------------------------------------------------
    Private Function CStrU(ByRef pstrANSI)
?
         Converts an ANSI string to Unicode
         Best used for small strings
?
        Dim llngLength   Length of ANSI string
        Dim llngIndex    Current position
?
         determine length
        llngLength = LenB(pstrANSI)
?
         Loop through each character
        For llngIndex = 1 To llngLength
?
             Pull out ANSI character
             Get Ascii value of ANSI character
             Get Unicode Character from Ascii
             Append character to results
            CStrU = CStrU & Chr(AscB(MidB(pstrANSI, llngIndex, 1)))
?
        Next
?
    End Function
 ------------------------------------------------------------------------------
    Private Function CStrB(ByRef pstrUnicode)
?
         Converts a Unicode string to ANSI
         Best used for small strings
?
        Dim llngLength   Length of ANSI string
        Dim llngIndex    Current position
?
         determine length
        llngLength = Len(pstrUnicode)
?
         Loop through each character
        For llngIndex = 1 To llngLength
?
             Pull out Unicode character
             Get Ascii value of Unicode character
             Get ANSI Character from Ascii
             Append character to results
            CStrB = CStrB & ChrB(Asc(Mid(pstrUnicode, llngIndex, 1)))
?
        Next
?
    End Function
 ------------------------------------------------------------------------------
End Class
 ------------------------------------------------------------------------------
%>

 

clsField.asp

<%
 ------------------------------------------------------------------------------   Author:     Lewis Moten   Date:       March 19, 2002 ------------------------------------------------------------------------------
?
 Field class represents interface to data passed within one field
‘
‘ ------------------------------------------------------------------------------
Class clsField
?
    Public Name              Name of the field defined in form
?
    Private mstrPath         Full path to file on visitors computer
                             C:Documents and SettingslmotenDesktopPhoto.gif
?
    Public FileDir           Directory that file existed in on visitors computer
                             C:Documents and SettingslmotenDesktop
?
    Public FileExt           Extension of the file
                             GIF
?
    Public FileName          Name of the file
                             Photo.gif
?
    Public ContentType       Content / Mime type of file
                             image/gif
?
    Public Value             Unicode value of field (used for normail form fields - not files)
?
    Public BinaryData        Binary data passed with field (for files)
?
    Public Length            byte size of value or binary data
?
    Private mstrText         Text buffer 
                                 If text format of binary data is requested more then
                                 once, this value will be read to prevent extra processing
?
 ------------------------------------------------------------------------------
    Public Property Get BLOB()
        BLOB = BinaryData
    End Property
 ------------------------------------------------------------------------------
    Public Function BinaryAsText()
?
         Binary As Text returns the unicode equivilant of the binary data.
         this is useful if you expect a visitor to upload a text file that
         you will need to work with.
?
         NOTICE:
         NULL values will prematurely terminate your Unicode string.
         NULLs are usually found within binary files more often then plain-text files.
         a simple way around this may consist of replacing null values with another character
         such as a space " "
?
        Dim lbinBytes
        Dim lobjRs
?
         Don‘t convert binary data that does not exist
        If Length = 0 Then Exit Function
        If LenB(BinaryData) = 0 Then Exit Function
?
         If we previously converted binary to text, return the buffered content
        If Not Len(mstrText) = 0 Then
            BinaryAsText = mstrText
            Exit Function
        End If
?
         Convert Integer Subtype Array to Byte Subtype Array
        lbinBytes = ASCII2Bytes(BinaryData)
?
         Convert Byte Subtype Array to Unicode String
        mstrText = Bytes2Unicode(lbinBytes)
?
         Return Unicode Text
        BinaryAsText = mstrText
?
    End Function
 ------------------------------------------------------------------------------
    Public Sub SaveAs(ByRef pstrFileName)
?
        Dim lobjStream
        Dim lobjRs
        Dim lbinBytes
?
         Don‘t save files that do not posess binary data
        If Length = 0 Then Exit Sub
        If LenB(BinaryData) = 0 Then Exit Sub
?
         Create magical objects from never never land
        Set lobjStream = Server.CreateObject("ADODB.Stream")
?
         Let stream know we are working with binary data
        lobjStream.Type = adTypeBinary
?
         Open stream
        Call lobjStream.Open()
?
         Convert Integer Subtype Array to Byte Subtype Array
        lbinBytes = ASCII2Bytes(BinaryData)
?
         Write binary data to stream
        Call lobjStream.Write(lbinBytes)
?
         Save the binary data to file system
           Overwrites file if previously exists!
        Call lobjStream.SaveToFile(pstrFileName, adSaveCreateOverWrite)
?
         Close the stream object
        Call lobjStream.Close()
?
         Release objects
        Set lobjStream = Nothing
?
    End Sub
 ------------------------------------------------------------------------------
    Public Property Let FilePath(ByRef pstrPath)
?
        mstrPath = pstrPath
?
         Parse File Ext
        If Not InStrRev(pstrPath, ".") = 0 Then
            FileExt = Mid(pstrPath, InStrRev(pstrPath, ".") + 1)
            FileExt = UCase(FileExt)
        End If
?
         Parse File Name
        If Not InStrRev(pstrPath, "") = 0 Then
            FileName = Mid(pstrPath, InStrRev(pstrPath, "") + 1)
        End If
?
         Parse File Dir
        If Not InStrRev(pstrPath, "") = 0 Then
            FileDir = Mid(pstrPath, 1, InStrRev(pstrPath, "") - 1)
        End If
?
    End Property
 ------------------------------------------------------------------------------
    Public Property Get FilePath()
        FilePath = mstrPath
    End Property
 ------------------------------------------------------------------------------
    Private Function ASCII2Bytes(ByRef pbinBinaryData)
?
        Dim lobjRs
        Dim llngLength
        Dim lbinBuffer
?
         get number of bytes
        llngLength = LenB(pbinBinaryData)
?
        Set lobjRs = Server.CreateObject("ADODB.Recordset")
?
         create field in an empty recordset to hold binary data
        Call lobjRs.Fields.Append("BinaryData", adLongVarBinary, llngLength)
?
         Open recordset
        Call lobjRs.Open()
?
         Add a new record to recordset
        Call lobjRs.AddNew()
?
         Populate field with binary data
        Call lobjRs.Fields("BinaryData").AppendChunk(pbinBinaryData & ChrB(0))
?
         Update / Convert Binary Data
             Although the data we have is binary - it has still been
             formatted as 4 bytes to represent each byte.  When we
             update the recordset, the Integer Subtype Array that we
             passed into the Recordset will be converted into a
             Byte Subtype Array
        Call lobjRs.Update()
?
         Request binary data and save to stream
        lbinBuffer = lobjRs.Fields("BinaryData").GetChunk(llngLength)
?
         Close recordset
        Call lobjRs.Close()
?
         Release recordset from memory
        Set lobjRs = Nothing
?
         Return Bytes
        ASCII2Bytes = lbinBuffer
?
    End Function
 ------------------------------------------------------------------------------
    Private Function Bytes2Unicode(ByRef pbinBytes)
?
        Dim lobjRs
        Dim llngLength
        Dim lstrBuffer
?
        llngLength = LenB(pbinBytes)
?
        Set lobjRs = Server.CreateObject("ADODB.Recordset")
?
         Create field in an empty recordset to hold binary data
        Call lobjRs.Fields.Append("BinaryData", adLongVarChar, llngLength)
?
         Open Recordset
        Call lobjRs.Open()
?
         Add a new record to recordset
        Call lobjRs.AddNew()
?
         Populate field with binary data
        Call lobjRs.Fields("BinaryData").AppendChunk(pbinBytes)
?
         Update / Convert.
             Ensure bytes are proper subtype
        Call lobjRs.Update()
?
         Request unicode value of binary data
        lstrBuffer = lobjRs.Fields("BinaryData").Value
?
         Close recordset
        Call lobjRs.Close()
?
         Release recordset from memory
        Set lobjRs = Nothing
?
         Return Unicode
        Bytes2Unicode = lstrBuffer
?
    End Function
?
 ------------------------------------------------------------------------------
End Class
 ------------------------------------------------------------------------------
%>

 

但是我们还需要把这个文件名加到文件列表中(如果说不添加,可以在服务器后端运行一个不断获取文件夹内的文件列表写入list.txt比较麻烦

于是我们就需要让用户自己输入刚才上传的文件名:

InputFilename.aspx

<html>
    <head>
        <title>Filename Inputer</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <form action="AddPath.aspx" method="post"><!--让AddPath.aspx将它加入列表-->
            <p>Input the file‘s filename you upload just then:</p>
            <input type="input" name="fnm">
            <input type="submit" value="Submit">
        </form>
    </body>
</html>

 

AddPath.aspx

<%@ Page Debug="true" %>
<html>
    <head>
        <title>AddPath</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <%
            Dim fso
            Dim f
            fso=CreateObject("Scripting.FileSystemObject")
            f=fso.OpenTextFile("D:cloudlist.txt",8,True) 注意这里要用绝对路径,不然会引发权限错误
            Dim fnm
            fnm=Request.Form("fnm")
            f.WriteLine(fnm)
            f.Close
            Response.write("<script>alert(‘UpLoad Success!‘);window.location.href=‘./UpLoad.asp‘;</script>") 跳转回去
        %>
    </body>
</html>

 

上传到此结束,接下来看下载

DownLoad.aspx

<html>
    <head>
        <title>DownLoad</title>
        <meta charset="UTF-8"></meta>
    </head>
    <body>
        <%
            Dim Fso
            Dim myFile
            Fso = Server.CreateObject("Scripting.FileSystemObject")
            myFile = Fso.OpenTextFile(Server.MapPath("list.txt"),1,True)
            While Not myFile.AtEndOfStream 将文件列表中的全部输出
                Dim V=myFile.ReadLine
                Response.Write("<a href=‘UpLoads" & V & "‘ download=‘" & V & "‘style=‘font-size:30px‘>" & V & "</a><br /><br />") 输出下载标签
            End While
        %>
    </body>
</html>

 

到此,所有文件都写完了,接下来可以http://localhost:端口/filecloudEV.html查看效果了

但是这个网址还有一个问题:

如果用户直接访问filecloudMAIN文件,TA可以直接绕过之前的验证,所以需要cookies的传递,请读者自行研究

以上是关于请简述ASP工作原理的主要内容,如果未能解决你的问题,请参考以下文章

请简述Hibernate工作原理?

ASP的工作原理是啥?

简述JSP运行原理

请解说下CompareTo()与Compare()详细工作原理

请简要描述Hadoop计算框架MapReduce的工作原理

请简要说明域名服务器的工作原理?