• Asp无组件上传带进度条(续)


    几个月前,写过一篇关于Asp无组件上传带进度条的Blog,当时主要分析了一下通过Web文件上传并在后台获取分析数据的实现原理。其中实现进度条的根本就是要实现分块获取数据,根据分块大小和块数记录已上传大小。还有一些具体的细节问题当时并没有说清楚:

    Q: 进度信息如何访问?
    A: 进度信息保存在Application中,每次上传时生成一个进度ID,根据这个进度ID可以检索Application中的当前上传进度信息。

    Q: 进度信息以什么形式保存在Application中?
    A: Asp太弱了,我分别试过Scripting.Dictionary和XMLDom,但是Asp中Application不能保存这种对象,要是asp.net就直接可以用Hashtable了。最后是在Application中用一个ADODB.Recordset对象来保存进度相关信息。

    Q: 怎么保证的页面能即时反应显示进度条信息?
    A:
    文件开头加上<%@enablesessionstate=false%>声明来关闭会话状态
    要保证禁用缓存:
     Response.CacheControl = "no-cache"
     Response.Expires = -1

    Q: 可以上传多大文件?
    A: 这个和网速,服务器内存等多方面因素有关,将Server.ScriptTimeout设置足够长,那么理论上可以和服务器保持连接很长时间。因为在asp中,不能实现对文件的“追加”写入,必须将所有待写入文件的数据都先保存在内存,这样如果上传大文件,那么将很占用服务器内存(文本文件可以使用TextStream.Write追加写入)。在asp.net下就比较爽了,分块读取的时候,每读一块分析一块,然后将上传文件的数据内容“追加”写入硬盘文件中,对内存占用很小很小。一般几十MB的文件还是没问题,太大的上传其实对于web下也不是很有意义。

    写了一个比较完善的实例,可以直接下载使用:

    演示下载

    发表于 2004年12月16日 11:45

    评论

    # re: Asp无组件上传带进度条(续)

    请教一下,如下一个例子
    <%
    TotalBytes = Request.TotalBytes
    if totalbytes>2000000 then
    xxxxxx
    end if
    %>
    当执行到xxxxxx的时候,死活出现“该页无法显示”的错误,只有在if之前先执行request.binaryread之后,才不会出现错误,但这样以来就要耗去相当长的时间,看你的例子好像也有这个问题。不知有什么办法
    2004-12-20 3:41 | dcime

    # re: Asp无组件上传带进度条(续)

    没说清楚,是要把TotalBytes个字节全部binaryread之后,执行下面的条件语句才不会出错,如果没读或读了一部分就出错,使用Err.raise方法也没什么用
    2004-12-20 23:23 | dcime

    # re: Asp无组件上传带进度条(续)

    我没能解决这个问题:(
    2004-12-20 23:33 | 宝玉

    # re: Asp无组件上传带进度条(续)

    我下载了这个组件,非常好用,我用它的原理做了一个可以将服务器端做的处理情况实时反映到客户端的类, 就是在服务器上处理10000条记录时在客户端可以显示出 1/10000,2/10000... ... 9999/10000 这种表示,我已经做出来了,核心部分当然是用这个组件的原理,但现在有一个问题,就是在服务器重启后,第一次运行不能动态显示,但服务器上仍在处理,处理完后,再一次运行就可以有我要的显示效果了,只要不关机或重启机器,就都好用,不知是为什么,如果你有时间,能否帮我看一下代码?我的Email: ztyabc@163.com,先谢谢了.
    2005-5-26 4:47 | zty

    # re: Asp无组件上传带进度条(续)

    OK,有空帮你看看!
    我msn: junmiuliu@msn.com
    2005-5-26 4:50 | dotey

    # re: Asp无组件上传带进度条(续)

    宝玉你好,我已将有问题的代码发送到你的信箱中了,请查收,另告知我的机器环境:
    C2:850,815,512MB,40G
    中文Win2k Server ,IE 6.0,IIS
    希望以后能和你多多交流,向你学习.谢谢.
    2005-5-26 20:13 | zty

    # re: Asp无组件上传带进度条(续)

    没收到!
    2005-5-26 21:17 | dotey

    # re: Asp无组件上传带进度条(续)

    我的是163的信箱,是不是不能和你的信箱通信,我的信被退回了,我又发了一遍。
    或者告诉我你的QQ,我明天上午再和你联系。
    我的QQ:195905179 十晓生
    谢谢
    2005-5-27 4:50 | zty

    # re: Asp无组件上传带进度条(续)

    我又申请了一个msn,号码为: dlxbdzty@hotmail.com
    请你帮帮我,谢谢
    2005-5-27 22:00 | zty

    # re: Asp无组件上传带进度条(续)

    UpdateOne.asp
    ======================
    <!-- #include file="pubFun.asp" -->
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>R-Victorian</title>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
    <link rel="stylesheet" href="parts/style.css" type="text/css">

    <script language="JavaScript">
    <!--
    var oXMLDoc = new ActiveXObject("Microsoft.XMLDOM");
    oXMLDoc.async = true;
    var theUniqueID= 0;
    var iTimerID=null;

    function UploadData()
    {

    document.myform.action = "SendProgress.asp";
    document.myform.target="upload"
    document.myform.submit();

    ProgressBar();
    }

    function ProgressBar()
    {
    sURL = "SendStatusXml.asp"
    oXMLDoc.onreadystatechange = Function( "fnLoadComplete();" );
    oXMLDoc.load( sURL );
    }


    function fnLoadComplete()
    {
    var iReadyState;
    try
    {
    iReadyState = oXMLDoc.readyState;
    }
    catch(e)
    {
    document.myform.textSy.value = iReadyState;
    return;
    }
    if( iReadyState != 4 )
    {
    document.myform.textSy.value = iReadyState;
    return;
    }

    if( oXMLDoc == null || oXMLDoc.xml == "" )
    {
    window.status = 'Xml load fault';
    return;
    }

    var oRoot = oXMLDoc.documentElement;
    var strCurrentNo,strCurrentCl,strCurrentCount,strTitle;//,strJd;

    if(oRoot != null)
    {
    if (oRoot.selectSingleNode("ErrorMessage") == null)
    {

    var readyState = oRoot.selectSingleNode("ReadyState").text;
    if ( readyState == "UnInit" )
    {
    iTimerID = setTimeout("ProgressBar()", 300);
    }

    else if ( readyState == "Cling" )
    {
    document.myform.textFileA.value = oRoot.selectSingleNode("clsInfoA").text;
    document.myform.textFileB.value = oRoot.selectSingleNode("clsInfoB").text;
    document.myform.textFileC.value = oRoot.selectSingleNode("clsInfoC").text;
    document.myform.textFileD.value = oRoot.selectSingleNode("clsInfoD").text;
    iTimerID = setTimeout("ProgressBar()", 300);
    }
    else if ( readyState == "End" )
    {
    //showHideContent("tableJd",false);


    alert("OK")
    }
    }
    else
    {
    if (iTimerID != null)
    clearTimeout(iTimerID)
    iTimerID = null;
    alert(oRoot.selectSingleNode("ErrorMessage").text);

    }
    }

    }

    function showHideContent(id, show)
    {
    var strId = new Array("textFileA","textFileB","textFileC","textFileD");
    var nIdCount = 4;
    var strDisp,strVis;
    var elem,i;
    if (show)
    {
    strDisp = 'block';
    strVis = 'visible';
    }
    else
    {
    strDisp = 'none';
    strVis = 'hidden';
    }
    elem = document.getElementById(id);
    elem.style.display = strDisp;
    elem.style.visibility = strVis;
    }


    //-->
    </script>
    </head>

    <body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" link="820606" vlink="820606" alink="820606" >
    <form name="myform" method="post" action="SendProgress.asp" enctype="multipart/form-data" target="upload">
    <table>
    <tr>
    <td >
    Index:
    </td>
    <td>
    <input name="textFileA" type="text" id="textFileA" style=" background-color:transparent; color:#FF0033;border-0;text-align:center" value="-" readonly>
    </td>
    </tr>
    <tr>
    <td>
    Record All Count:
    </td>
    <td>
    <input name="textFileB" type="text" id="textFileB" style=" background-color:transparent; color:#FF0033;border-0;text-align:center" value="-" readonly>
    </td>
    </tr>
    <tr>
    <td>
    Code in Current DB:
    </td>
    <td>
    <input name="textFileC" type="text" id="textFileC" style=" background-color:transparent; color:#FF0033;border-0;text-align:center" value="-" readonly>
    </td>
    </tr>
    <tr>
    <td>
    Record Count in Current DB
    </td>
    <td>
    <input name="textFileD" type="text" id="textFileD" style=" background-color:transparent; color:#FF0033;border-0;text-align:center" value="-" readonly >
    </td>
    </tr>

    <tr>
    <td>
    oXMLDoc.readyState
    </td>
    <td>
    <input name="textSy" type="text" id="textSy" style=" background-color:transparent; color:#FF0033;border-0;text-align:center" value="-" readonly >
    </td>
    </tr>

    </table>
    <p><p>
    <iframe name="upload" width="0%" height="0%" ></iframe>
    <form>
    </body>
    <script language="javascript">
    UploadData();
    </script>

    </html>
    2005-5-27 22:02 | zty

    # re: Asp无组件上传带进度条(续)

    SendStatusXml.asp
    ======================
    <%@EnableSessionState=False%>

    <!-- #include file="SendStatus.asp" -->

    <%
    Response.CacheControl = "no-cache"
    Response.Expires = -1
    Response.ContentType = "text/xml"

    Dim du, pi, progressID

    Set du = new clsSendStatus
    Set pi = du.GetProgressInfo()


    Dim xmlDoc
    Set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
    xmlDoc.loadXML "<ProgressInfo/>"
    Set root = xmlDoc.documentElement

    Dim eleclsInfoA, eleclsInfoB, eleclsInfoC, eleclsInfoD, eleclsInfoE,eleReadyState, eleErrorMessage
    If Not IsEmpty(pi) Then

    Set eleclsInfoA = xmlDoc.createElement("clsInfoA")
    root.appendChild(eleclsInfoA)
    eleclsInfoA.text = pi.clsInfoA

    Set eleclsInfoB = xmlDoc.createElement("clsInfoB")
    root.appendChild(eleclsInfoB)
    eleclsInfoB.text = pi.clsInfoB

    Set eleclsInfoC = xmlDoc.createElement("clsInfoC")
    root.appendChild(eleclsInfoC)
    eleclsInfoC.text = pi.clsInfoC

    Set eleclsInfoD = xmlDoc.createElement("clsInfoD")
    root.appendChild(eleclsInfoD)
    eleclsInfoD.text = pi.clsInfoD


    Set eleclsInfoE = xmlDoc.createElement("clsInfoE")
    root.appendChild(eleclsInfoE)
    eleclsInfoE.text = pi.clsInfoE

    Set eleReadyState = xmlDoc.createElement("ReadyState")
    root.appendChild(eleReadyState)
    eleReadyState.text = pi.ReadyState

    If pi.ErrorMessage <> "" Then
    Set eleErrorMessage = xmlDoc.createElement("ErrorMessage")
    root.appendChild(eleErrorMessage)
    eleErrorMessage.text = pi.ErrorMessage
    End If
    Else
    Set eleErrorMessage = xmlDoc.createElement("ErrorMessage")
    root.appendChild(eleErrorMessage)
    eleErrorMessage.text = "读取失败"
    End If

    response.write("<?xml version=""1.0"" encoding=""GB2312""?>"&xmlDoc.xml)

    set du = nothing
    set pi = nothing
    set xmlDoc = nothing
    set root = nothing

    %>
    2005-5-27 22:03 | zty

    # re: Asp无组件上传带进度条(续)

    SendStatus.asp
    =====================
    <%
    '主要是以上传的组件为基础,去掉了一些东西.
    Class clsSendStatus

    Public ErrMsg
    Private Info
    public Progress
    Private SendStatusProgressInfo

    Private Sub Class_Initialize()

    SendStatusProgressInfo = "DoteySendStatusProgressInfo"
    ErrMsg = ""
    Set Progress = New ProgressInfo
    End Sub

    Private Sub Raise(Message)
    ErrMsg = ErrMsg & "[" & Now & "]" & Message & "<BR>"
    Progress.ErrorMessage = Message
    UpdateProgressInfo()

    End Sub

    public Sub UpdateProgressInfo()
    Const adTypeText = 2, adDate = 7, adUnsignedInt = 19, adVarChar = 200
    Application.Lock()

    if IsEmpty(Application(SendStatusProgressInfo)) Then
    Set Info = Server.CreateObject("ADODB.Recordset")
    Set Application(SendStatusProgressInfo) = Info

    Info.Fields.Append "fielInfoA", adVarChar,60
    Info.Fields.Append "fielInfoB", adVarChar,60
    Info.Fields.Append "fielInfoC", adVarChar,60
    Info.Fields.Append "fielInfoD", adVarChar,60
    Info.Fields.Append "fielInfoE", adVarChar,60
    Info.Fields.Append "ReadyState", adVarChar, 60
    Info.Fields.Append "ErrorMessage", adVarChar, 60

    Info.Open
    Info.AddNew
    Else
    Set Info = Application(SendStatusProgressInfo)

    If (Info.EOF) Then
    Info.AddNew
    End If
    End If


    Info("fielInfoA") = Progress.InfoA
    Info("fielInfoB") = Progress.InfoB
    Info("fielInfoC") =Progress.InfoC
    Info("fielInfoD") = Progress.InfoD
    Info("fielInfoE") = Progress.InfoE
    Info("ReadyState") = Progress.ReadyState
    Info("ErrorMessage") = Progress.ErrorMessage
    Info.Update
    Application.UnLock

    End Sub

    Public Function GetProgressInfo()

    Dim pi, Infos
    Set pi = New ProgressInfo
    If Not IsEmpty(Application(SendStatusProgressInfo)) Then
    Set Infos = Application(SendStatusProgressInfo)
    If Not Infos.Eof Then

    pi.clsInfoA = trim(Infos("fielInfoA"))
    pi.clsInfoB = trim(Infos("fielInfoB"))
    pi.clsInfoC = trim(Infos("fielInfoC"))
    pi.clsInfoD = trim(Infos("fielInfoD"))
    pi.clsInfoE = Trim(Infos("fielInfoE"))
    pi.ReadyState = Trim(Infos("ReadyState"))
    pi.ErrorMessage = Trim(Infos("ErrorMessage"))
    Set GetProgressInfo = pi

    End If
    End If
    Set GetProgressInfo = pi
    Set Infos = nothing
    set pi = nothing
    End Function

    public sub KillMe()
    Set Progress = nothing
    Set Info = nothing
    set Application(SendStatusProgressInfo) = nothing

    Application.Contents.Remove SendStatusProgressInfo

    end sub

    End Class


    Class ProgressInfo

    Public ErrorMessage
    Public ReadyState
    '可以传回五个数据,可以随时添加
    public clsInfoA
    public clsInfoB
    public clsInfoC
    public clsInfoD
    public clsInfoE

    Private Sub Class_Initialize()
    clsInfoA = ""
    clsInfoB = ""
    clsInfoC = ""
    clsInfoD = ""
    clsInfoE = ""
    ReadyState = "UnInit"
    ErrorMessage = ""
    End Sub

    Public Property Get InfoA
    InfoA = clsInfoA
    End Property

    Public Property Get InfoB
    InfoB = clsInfoB
    End Property

    Public Property Get InfoC
    InfoC = clsInfoC
    End Property

    Public Property Get InfoD
    InfoD = clsInfoD
    End Property

    Public Property Get InfoE
    InfoE = clsInfoE
    End Property

    End Class


    %>
    2005-5-27 22:04 | zty

    # re: Asp无组件上传带进度条(续)

    SendProgress.asp
    =====================
    <!-- #include file="SendStatus.asp" -->
    <!-- #include file="PubFun.asp" -->

    <%

    Server.ScriptTimeout = 9999

    funCl() 'PubFun.asp中的主处理函数

    %>
    2005-5-27 22:04 | zty

    # re: Asp无组件上传带进度条(续)

    pubFun.asp
    ======================
    <%
    'ReadyState = "UnInit","Cling","End"
    '未准备好,正在处理,处理结束

    const pubStatusStep = 20

    '处理的主函数
    function funCl()
    dim objSend
    set objSend = new clsSendStatus

    funClA(objSend)
    funClB(objSend)
    funClC(objSend)
    funClD(objSend)
    objSend.Progress.ReadyState = "End"
    objSend.UpdateProgressInfo()


    end function

    '第一个处理函数
    function funClA(t)
    dim nCount
    nCount = 100

    dim i,j

    for i = 0 to 10 '当前数据库记录数为10
    for j = 0 to 6000 '模拟处理过程
    if j mod pubStatusStep = 0 then 'J的每一个步进不需要都发送,否则太慢
    t.Progress.ReadyState = "Cling"
    t.Progress.clsInfoA = "0"
    t.Progress.clsInfoB = nCount
    t.Progress.clsInfoC = i
    t.Progress.clsInfoD = 10
    t.UpdateProgressInfo()
    end if
    next
    next
    end function

    'funClB,funClC,funClD与 funClA 一样
    function funClB(t)
    dim nCount
    nCount = 100

    dim i,j,k

    for i = 0 to 20
    for j = 0 to 6000
    if j mod pubStatusStep = 0 then
    t.Progress.ReadyState = "Cling"
    t.Progress.clsInfoA = "1"
    t.Progress.clsInfoB = nCount
    t.Progress.clsInfoC = i
    t.Progress.clsInfoD = 20
    t.UpdateProgressInfo()
    end if
    next
    next
    end function

    function funClC(t)
    dim nCount
    nCount = 100
    dim i,j,k
    for i = 0 to 30
    for j = 0 to 6000
    if j mod pubStatusStep = 0 then
    t.Progress.ReadyState = "Cling"
    t.Progress.clsInfoA = "2"
    t.Progress.clsInfoB = nCount
    t.Progress.clsInfoC = i
    t.Progress.clsInfoD = 30
    t.UpdateProgressInfo()
    end if
    next
    next
    end function

    function funClD(t)
    dim nCount
    nCount = 100

    dim i,j,k

    for i = 0 to 40
    for j = 0 to 6000
    if j mod pubStatusStep = 0 then
    t.Progress.ReadyState = "Cling"
    t.Progress.clsInfoA = "3"
    t.Progress.clsInfoB = nCount
    t.Progress.clsInfoC = i
    t.Progress.clsInfoD = 40
    t.UpdateProgressInfo()
    end if
    next
    next

    end function

    %>
    2005-5-27 22:05 | zty

    # re: Asp无组件上传带进度条(续)

    主文件是 UpdateOne.asp
    执行它即可,请你在有空的时候帮我看一下,这个类如果能做的好用的话,就可以在服务器端处理大量的数据时可以返回给客户一个实时的信息,以免让用户以为死机了,还是有一定的实用价值的.谢谢了.
    2005-5-27 22:09 | zty

    # re: Asp无组件上传带进度条(续)

    主文件是 UpdateOne.asp
    执行它即可,请你在有空的时候帮我看一下,这个类如果能做的好用的话,就可以在服务器端处理大量的数据时可以返回给客户一个实时的信息,以免让用户以为死机了,还是有一定的实用价值的.谢谢了.
    2005-5-27 22:09 | zty

    # re:Asp无组件上传带进度条(续)

    Asp无组件上传带进度条(续)ooeess
    2005-6-14 4:58 | 气味检测仪

    # re:Asp无组件上传带进度条(续)

    Asp无组件上传带进度条(续)ooeess
    2005-6-14 18:06 | 测汞

    # re: Asp无组件上传带进度条(续)

    如何利用ASP把图片上传到数据库


    作者:tigerwen01 来源:PConline 加入时间:2004-11-30
    ASP(Active Server Pages)是Microsoft很早就推出的一种WEB应用程序解决方案,也是绝大多数从事网站开发人员很熟悉的一个比较简单的编程环境。通过ASP我们可以创建功能强大的动态的WEB应用程序。ASP虽然功能很强大,但有些功能用纯ASP代码完成不了,为了能保证开发出功能更加强大的WEB应用程序,我们可以借助调用COM组件。
      在日常工作中,例如开发一个“商品网上销售系统”吧,为了使顾客对商品的外观有所了解,也就是顾客在看商品的文字介绍的同时在文字的旁边有该商品的图片加以说明,这样顾客就可以对该商品有个系统的了解,对推销商品有很大的帮助。所以我们在开发系统时当然就要加入图片处理模块,即如何把图片上传到服务器(图片可以放在WEB服务器上某一个文件夹里也可以放在SQL Server服务器里)和如何让上传的图片在浏览器端显示出来,这都是开发人员要考虑到的问题。

      上传图片到服务器有多种方法,可以使用文件上传组件也可以使用纯ASP代码来实现。在CSDN的WEB版ASP上经常有网友问这样的问题“如何利用ASP把图片上传到数据库里”,为了方便CSDN需要了解这方面的知识,这篇文章将详细讲解使用ASP上传图片的做法并给出代码,以飨读者。

      首先了解一下在程序中用到的各种对象及其语法:

      1) Request.BinaryRead()方法

      ● 使用Request.BinaryRead()方法可以获取提交的文件数据

      ● 语法

      VarReValue= Request.BinaryRead(number)

      变量VarReValue返回值保存从客户端读取到的二进制数据;

      参数number指明要从客户端读取的二进制数据量的大小。

      2) Response.BinaryWrite()方法

      ● 使用Response.BinaryWrite()方法可以从数据库中获取图片数据并显示到客户端的浏览器中。

      ● 语法

      Response.BinaryWrite data

      参数data是要写进客户端浏览器中的二进制数据包。

      3) AppendChunk方法

      ● AppendChunk方法的作用是将二进制数据追加到Field或Parameter对象。

      ● 语法

      object.AppendChunk data

      参数data为要追加到Field或Parameter对象中的数据包。

      4) GetChunk方法

      ● GetChunk方法返回二进制数据的内容。

      ● 语法

      object. GetChunk(size)

      参数size指明要返回二进制数据的长度,可以是长整型表达式。

      5) Request.TotalBytes方法

      ● Request.TotalBytes方法返回从客户端读取到的数据的字节数,这个值跟上面所提到的number相对应,可以大于或等于number值。

      ● 语法

      number= Request.TotalBytes

      大体了解了一些方法及其使用方法后,接下来我们就开始设计数据库和相关编写代码了。

      第一步:数据库的设计(以Ms SQL Server7为例):

      Create table img --创建用来存储图片的表,命名为img

      (

      id int identity(1,1) not null,

      img image

      )

      第二步:程序编写,其中省略了用户输入界面,这里只给出很重要的两个文件即图片上传处理(processimg.asp)和显示图片(ShowImg.asp)文件。

      1) processimg.asp文件代码:

      〈%

      Response.Buffer=True

      ImageSize=Request.TotalBytes ‘获取提交数据量的总字节数

      ImageData=Request.BinaryRead(ImageSize) ‘保存从客户端读取到的数据

      ‘优化读取到的二进制数据

      BnCrLf=chrB(13)&chr(10)

      Divider=LeftB(ImageData,Clng(InstrB(ImageData, BnCrLf))-1)

      Dstart=InstrB(ImageData, BnCrLf& BnCrLf)+4

      Dend=InstrB(Dstart+1, ImageData, Divider)- Dstart

      MyData=MidB(ImageData, Dstart, Dend)

      ‘创建对象实例

      Set imgConn=Server.CreateObject(“ADODB.Connection”)

      StrConn=”Driver={SQL Server};Server=ServerName;”& _

    “Uid=xxxx;Pwd=xxxx;DataBase=DataBaseName”

      imgConn.open strConn

      Set Rs= Server.CreateObject(“ADODB.RecordSet”)

      Sql=”Select * From img Where id is null”
     
      Rs.open sql,imgConn,1,3

      ‘追加数据到数据库

      Rs.AddNew

      Rs(“img”).AppendChunk myData

      Rs.Update

      ‘关闭和释放对象

      Rs.close

      ImgConn.close

      Set Rs=Nothing

      Set ImgConn=Nothing

      %〉

      2) ShowImg.asp文件代码:

      〈%

      Response.Expires = 0

      Response.buffer=True

      Response.clear

      ‘创建对象实例

      Set imgConn=Server.CreateObject(“ADODB.Connection”)

      StrConn=”Driver={SQL Server};Server=ServerName;”& _

    “Uid=xxxx;Pwd=xxxx;DataBase=DataBaseName”

      imgConn.open strConn

      Set Rs= Server.CreateObject(“ADODB.RecordSet”)

      Sql=”Select img From img Where id=1” 这里的id可以使用Request(“id”)获得

      Rs.open sql,imgConn,1,1

      Response.ContentType=”image/*”

      Response.BinaryWrite Rs.(“img”).GetChunk(7500000)

      ‘关闭和释放对象

      Rs.close

      ImgConn.close

      Set Rs=Nothing

      Set ImgConn=Nothing

      %〉

      至此,本文对如何使用ASP上传图片的原理和示例都讲完了,有什么不妥的地方请各位指正,谢谢!同时希望本文能够确实能为需要这方面帮助的网友提供实质性的帮助


    2005-6-30 5:51 | Clone oneself

    # re: Asp无组件上传带进度条(续)

    迫切想知道
    "boundary=---------------------------7d429871607fe"
    7d429871607fe这个数值是如何产生的呢?是由服务器端随时生成的还是由IE在本地随机生成的呀?提交时这个数值要通过服务器端验证无误后才能正确上传数据吗????!
    请宝玉和各位前辈指教,我无法获取网站的boundary的值,获取的Content-Type标头值都是"Text/html"之类,而从来没有获取过“multipart/form-data; boundary=---------------------------7d429871607fe”这样的标头,恳请指教!!
    2005-7-10 7:55 | 我是一只小小小菜鸟

    # re:Asp无组件上传带进度条(续)

    Asp无组件上传带进度条(续)ooeess
    2005-7-23 13:21 | 红外热像仪

    # 让asp.net默认的上传组件支持进度条反映

    Ping Back来自:blog.csdn.net
  • 相关阅读:
    UVALive
    训练指南 UVA
    训练指南 UVALive
    Codeforces Round #535 (Div. 3)
    训练指南 UVALive
    训练指南 UVALive
    Codeforces Round #534 (Div. 2)
    Codeforces Round #532 (Div. 2)
    《算法问题实战策略》——chaper9——动态规划法技巧
    《训练指南》——8.3
  • 原文地址:https://www.cnblogs.com/cy163/p/280824.html
Copyright © 2020-2023  润新知