asp文件上传(html上传文件)
今天给各位分享asp文件上传的知识,其中也会对html上传文件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
关于asp文件上传问题请教高手。
1.asp只支持部分文件流操作,比如:一般说法是文件流只能读取完了才能去操作(ado.stream组件)它。这样你就不能去完全控制它,asp本身就是不参与内存管理的一种脚本。这方面弱。
2.上面如果成立,就有这样个思路,建立一个数据流对象,然后建立多个目标数据流对象,每个目标流对象读取设定大小数据后,写入文件。
3,相关属性、方法支持参考
a. position数据流位置,表示数据操作从这里开始,(第一个位置的值为 0,不是 1,简单例子:str.position=count-lenb(result)-2'position指出文件的开始位置)
b。 SaveToFile将 Stream对象数据保存为文件,第二个参数:1-不允许覆盖,2-覆盖写入(例子:desc.SaveToFile fullpath,2'以fullpath指定的路径及名称保存文件)
c。CopyTo(destStream, count)将 Stream对象的指定数据拷贝到 destStream
(例子:str.copyto desc, lenb(filecotent)'lenb(filecontent)表示文件的长度)
4.关于ForAppending模式,你可试一下上面提供的SaveToFile的option参数,是否支持
5.我觉得性能什么的影响不大,只要分块合适
6.可以这样探讨,去实践,但如果不是服务器有这样的限制,应该采取组件去实现,2个g的上传也没问题
asp 如何实现带进度条的上传文件功能
以下就以abcupload4为例来说明怎么来制作实时的文件上传进度条。
(注:我们在abcupload自带例子基础上改进。)
progressupload.htm(上传文件的前台提交,我们让进度条在这个里面显示)
<HTML>
<body>
<script language="javascript">
<!--
theUniqueID=(new Date()).getTime()% 1000000000;
function s()//让数据提交的同时执行显示进度条的函数
{
bar();//开始执行反映上传情况的函数
document.myform.action="progressupload.ASP?ID=" theUniqueID;//处理上传数据的程序
document.myform.target="up"//将提交的数据放在一个名字是up隐藏的iframe里面处理,这样提交的页面就不会跳转到处理数据的页
document.myform.submit();//提交表单
}
function bar()
{
bar1.style.display='';//让显示上传进度显示的层的可见
var timeoutid=null;//这个变量是作定时器的ID
var oXMLDoc= new ActiveXObject('MSXML');//创建'MSXML'对象
sURL="progressbar.ASP?ID=" theUniqueID"&temp=" Math.random();//获取上传状态数据的地址
oXMLDoc.url= sURL;//load数据
var oRoot=oXMLDoc.root;//获取返回XML数据的根节点
if(oRoot.children!= null)
{
if(oRoot.children.item(0).text-100==0)//文件上传结束就取消定时器
clearTimeout(timeoutid)
PercentDone.style.width=oRoot.children.item(0).text"%";//设置进度条的百分比例
//根据返回的数据在客户端显示
min.innerHTML=oRoot.children.item(1).text;//显示剩余时间(分钟)
secs.innerHTML=oRoot.children.item(2).text;//显示剩余时间(秒钟)
BytesDone.innerHTML=oRoot.children.item(3).text;//已上传数据大小
BytesTotal.innerHTML=oRoot.children.item(4).text;//总大小
BytesPerSecond.innerHTML=oRoot.children.item(5).text;//传输速率
Information.innerHTML=oRoot.children.item(6).text;//上传信息
}
if(oRoot.children.item(0).text-100<0)//只要文件没有传完,就每隔多少时间获取一次数据
timeoutid= setTimeout("bar()",50)//这里设定时间间隔是0.05秒,你也可以根据你的情况修改获取数据时间间隔
}
//-->
</script>
<form name="myform" method="post" action="progressupload.ASP" enctype="multipart/form-data" target=up>
<input type="file" name="filefield1"><br>
<input type="button" name="dosubmit" value="Upload" onclick="s()"><br>
<div id=bar1 style="display:none">
<table border="0" width="100%">
<tr>
<td><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b>传送:</b></font></td>
</tr>
<tr bgcolor="#999999">
<td>
<table border="0" width="" cellspacing="1" bgcolor="#0033FF" id=PercentDone>
<tr>
<td><font size=1></font></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table border="0" width="100%">
<tr>
<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1">剩余时间:</font></td>
<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
<span id=min></span>分
<span id=secs></span>秒
(<span id=BytesDone></span> KB of
<span id=BytesTotal></span> KB已上传)</font></td>
</tr>
<tr>
<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
传送速度:</font></td>
<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
<span id=BytesPerSecond></span> KB/秒</font></td>
</tr>
<tr>
<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1">信息:</font></td>
<td><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><span id=Information></span></font></td>
</tr>
</table>
</td>
</tr>
<tr></tr>
</table>
</div>
<iframe name="up" style="display:none"></iframe>
</form>
</body>
</HTML>
progressbar.ASP(返回上传状况数据的文件)
<%@EnableSessionState=False%>
<%
On Error Resume Next
Set theProgress= Server.CreateObject("ABCUpload4.XProgress")'创建上传组件对象
theProgress.ID= Request.QueryString("ID")
'将返回数据以XML格式输出
%>
<?XML version="1.0" encoding="gb2312"?>
<plan>
<PercentDone><%=theProgress.PercentDone%></PercentDone>
<min><%=Int(theProgress.SecondsLeft/60)%></min>
<secs><%=theProgress.SecondsLeft Mod 60%></secs>
<BytesDone><%=Round(theProgress.BytesDone/ 1024, 1)%></BytesDone>
<BytesTotal><%=Round(theProgress.BytesTotal/ 1024, 1)%></BytesTotal>
<BytesPerSecond><%=Round(theProgress.BytesPerSecond/1024, 1)%></BytesPerSecond>
<Information><%=theProgress.Note%></Information>
</plan>
progressupload.ASP(处理上传文件)
<%@EnableSessionState=False%>
<%
Response.Expires=-10000
Server.ScriptTimeOut= 300
Set theForm= Server.CreateObject("ABCUpload4.XForm")
theForm.Overwrite= True
theForm.MaxUploadSize= 8000000
theForm.ID= Request.QueryString("ID")
Set theField= theForm("filefield1")(1)
If theField.FileExists Then
theField.Save theField.FileName
End If
%>
<HTML>
<body>
传送结束
</body>
</HTML>
ASP文件上传原理分析及实现实例
摘要在基于/的应用环境中上传各种类型的文件一直是困扰用户文件管理应用的难题之一在HTTP中上传文件有三种机制 RFC PUT和WebDAV常用的实现方法是利用在RFC中引入的一个新类型 File以及ADO Stream对象本文对上述上传方法及实现原理作了论述并给出了具体解决实例 ASP FILE对象
当前基于/模式的应用比较流行当用户需要将文件传输到上时常用方法之一是运行FTP并将每个用户的FTP默认目录设为用户的Web主目录这样用户就能运行FTP客户程序并上传文件到指定的 Web目录这就要求用户必须懂得如何使用FTP客户程序因此这种解决方案仅对熟悉FTP且富有经验的用户来说是可行的如果我们能把文件上传功能与Web集成使用户仅用Web就能完成上传任务这对于他们来说将是非常方便的但是一直以来由于File System Object的仅能传送文本文件的局限所以ASP最大的难题就是文件上传问题下面介绍的就是如何在基于HTTP协议的网页中实现文件的上传
一通过HTTP上传的三种机制
通过HTTP上传有三种机制 RFC PUT和 WebDAV
PUT是在HTTP引入了一个新的HTTP动词当web收到一个HTTP PUT和对象名字它将会验证用户接收HTTP流的内容并把它直接存入web由于这可能会对一个web站点造成破坏并且还会失去HTTP最大的优势可编程性在PUT的情况下自己处理请求没有空间让CGI或者ASP应用程序介入唯一让你的应用程序捕获PUT的方法是在低层操作 ISAPI过滤层由于相应的原因 PUT的应用很有限
而WebDAV允许web内容的分布式认证与翻译它引入了几种新的HTTP动词允许通过HTTP上传锁定/解锁登记/检验web内容 Office中的 Save to web就是通过WebDAV来实现的如果你所感兴趣的一切都是上传内容 WebDAV应用得非常出色它解决了很多问题然而如果你需要在你的web应用程序里面上传文件 WebDAV对你就毫无用处可言象HTTP PUT一样那些WebDAV的动词是被解释的而不是web应用程序你需要工作在ISAPI过滤层来访问WebDAV的这些动词并在你的应用程序中解释内容
RFC()最终被W C在HTML中接受前是作为一种建议标准它是一种非常简单但是功能很强大的想法在表单字段中定义一个新类型<INPUT TYPE= FILE>
并且在表单本身加入了不同的编码方案不再使用典型的<FORM ACTION= formproc asp METHOD= POST>而是使用<FORM ACTION= formproc asp METHOD= POST ENCTYPE= multipart/form data>这种编码方案在传送大量数据的时候比起缺省的 application/x url encoded表单编码方案显得效率要高得多 URL编码只有很有限的字符集使用任何超出字符集的字符必须用%nn代替这里的nn表示相应的个十六进制数字例如即使是普通的空格字符也要用%代替而RFC使用多部分MIME编码就象通常在e mail消息中看到的那样不编码来传送大量数据而只是在数据周围加上很少的简单但实用的头部主要的厂商都采用了建议的浏览……按钮用户能很容易的使用本地打开文件……对话框选择要上传的文件
RFC仍然将大多数文件上传的灵活方法留给了你的web应用程序 PUT用得很有限 WebDAV对内容的作者很有用比如FrontPage用户但是对想在web应用程序中加入文件上传的web开发者来说很少用到因此 RFC是在web应用程序中加入文件上传的最好的办法
在实际应用中免费提供了Posting Acceptor ASP不懂 multipart/form data编码方案取而代之提供了Posting Acceptor Posting Acceptor是一种在上传完成后接受REPOST到一个ASP页的ISAPI应用程序
Sofare Artisans的SA FileUp是最早的商业Active Server之一几经改进现在作为一个纯粹的ASP存在
二基于ASP的文件上传实现原理分析
基本原理是采用ADO Stream对象的BinaryRead方法将FORM中的所有数据读出从中截取出所需的文件数据以二进制文件方式存盘
下面是上传文件页面的一个例子()<><body><form name= Upload Method= Post Enctype= multipart/form data Action= Upload asp><input type= file name= FileName><INPUT TYPE= Submit VALUE= Upload></TD></form></body></>
程序中使用了文件对象这样在Upload asp中采用BinaryRead方法读来的原始数据就不仅仅是选择的文件本身的数据还包含该文件在用户硬盘上的路径类型提交页面的表单等相关信息的描述这样我们就需从中提取出文件的具体内容根据分析数据的头部信息与数据的分界线是两对回车换行符尾部也有分隔信息我们可以采用类似以下的方法获取文件数据 Dim FormData FormSize DataStart CLStr DivStrFormSize=Request TotalBytesFormData=Request BinaryRead(FormSize)CLStr=ChrB()&ChrB()DataStart=InStrB(FormData CLStr&CLStr)+是两对回车换行符的长度DivStr=LeftB(FormData InStrB(FormData CLStr))DataSize=InStrB(DataStart+ FormData DivStr) DataStart FormData=MidB(FormData DataStart DataSize) FormData就是文件的内容了中间根据需要可进行相应的处理最后的工作就是将文件保存了保存的方法可以有两种一种是利用VB或VC之类程序中的二进制文件操作方法在工程中加入适当的类型库最终编译成DLL文件使用时再将该DLL文件注册就可以了文件存贮程序如下 Public Function SaveFile(Pathname As String) As String Dim objContext As ObjectContext Dim objRequest As Request Set objContext=GetObjectContext() Set objRequest=objContext( Request)以下的一段代码是进行文件存贮的有关操作Dim FormData() As Byte CLStr DivStr Dim DataStart As Long DataSize As Long DataSize=objRequest TotalBytes Redim FormData(DataSize) FormData=objRequest BinaryRead(DataSize) CLStr=ChrB()& ChrB() DataStart=InStrB(FormData CLStr& CLStr)+ DivStr=LeftB(FormData InStrB(FormData CLStr)) DataSize=InStrB(DataStart+ FormData DivStr) DataStart FormData=MidB(FormData DataStart DataSize)创建一个二进制文件并将FormData写入其中 Open Pathname For Binary As Put# FormData Close# SaveFile= OK! End Function第二种方法是利用ADO STREAM中提供的二进制文件操作方法来完成保存文件的语句是 StreamOBJ SaveToFile(fileName)在这种操作中我们可以将有关的操作存放在一个类文件中在应用时直接将该类文件包含在ASP程序中就可以了具体处理方法请参阅有关介绍三.文件上传实现方法实例实现文件上传可使用或无方式对于类比如说microsoft posting acceptor(简称mpa)就是公司发布的一个免费这类的安装也比较方便对于的mpa运行它的安装文件就可以了而一般的dll形式的我们则需要进行注册例如要使用aspcnUP dll只要在Window上执行regsvr [path\]aspcnUP dll系统出现注册成功的信息提示就可以使用该了对于无类如的无上传类 upload_ xsoft在使用时只要在处理程序中包含以下的语句就可以了<!#include FILE= upload inc>set upload=new upload_ xSoft建立上传对象有关的属性与操作方法请参阅该的使用手册下面是詀spcnUP dll为例上传部分类型文件的源代码(upload asp)<%@ language= vbscript Set fileUP=Server CreateObject( aspcn Upload)fileUP Maxsize= fileUP Path= d:\upfile fileUP UploadFor i= to fileUP Countfieldname=fileUP FieldName(i)If fileUP FileType(fieldname)= zip Or ileUP FileType(fieldname)= rar ThenfileUP Save fieldnameEnd If NextSet fileUP=Nothing%>四.结束语应用模式还在快速地发展着在ASP.NET中已经内置了文件上传的功能使用非常简单方便作为一种全新的技术 ASP.NET并不只是ASP的简单升级它是一个用于Web开发的全新框架其中包含了许多新的特性 ASP.NET提供了更易于编写结构更清晰的代码利用这些代码我们将会更容易地进行再利用和共享从而开发出更多更实用的程序来 lishixinzhi/Article/program/net/201311/13562
关于asp文件上传和html上传文件的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。