自述文件.htm
来自「在ASP中调用的无组件上传」· HTM 代码 · 共 339 行 · 第 1/2 页
HTM
339 行
</TR>
<TR>
<TD HEIGHT="2" COLSPAN="2"> </TD>
</TR>
<TR>
<TD HEIGHT="2" COLSPAN="2"><STRONG><A NAME="FileInfo_Class"></A>clsFileInfo 概述</STRONG></TD>
</TR>
<TR>
<TD HEIGHT="3"> </TD>
<TD HEIGHT="3">文件信息类,用来存贮上传的文件信息</TD>
</TR>
<TR>
<TD HEIGHT="10" COLSPAN="2"> </TD>
</TR>
<TR>
<TD COLSPAN="2"><STRONG>clsFileInfo 公共属性</STRONG></TD>
</TR>
<TR>
<TD> </TD>
<TD><TABLE WIDTH="100%" BORDER="1" CELLPADDING="0" CELLSPACING="0" BORDERCOLOR="#999999" CLASS="stable">
<TR VALIGN="middle">
<TD WIDTH="210" HEIGHT="20"><IMG SRC="1.GIF" WIDTH="16" HEIGHT="16"> FileName</TD>
<TD> 返回上传的文件名。</TD>
</TR>
<TR VALIGN="middle">
<TD HEIGHT="20"><IMG SRC="1.GIF" WIDTH="16" HEIGHT="16"> FilePath</TD>
<TD> 返回上传时文件在客户端的路径。</TD>
</TR>
<TR VALIGN="middle">
<TD HEIGHT="20"><IMG SRC="1.GIF" WIDTH="16" HEIGHT="16"> FileExt</TD>
<TD> 返回文件扩展名。</TD>
</TR>
<TR VALIGN="middle">
<TD HEIGHT="20"><IMG SRC="1.GIF" WIDTH="16" HEIGHT="16"> FileMIME</TD>
<TD> 返回文件MIME类别。</TD>
</TR>
<TR VALIGN="middle">
<TD HEIGHT="20"><IMG SRC="1.GIF" WIDTH="16" HEIGHT="16"> FileSize</TD>
<TD> 返回文件大小(以字节为单位)。</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD HEIGHT="10" COLSPAN="2"></TD>
</TR>
<TR>
<TD COLSPAN="2"> </TD>
</TR>
<TR>
<TD COLSPAN="2"><STRONG><A NAME="Dictionary" ID="Dictionary"></A>Dictionary 对象</STRONG> 请参考VBSCRIPT帮助取得更详细的属性和方法</TD>
</TR>
<TR>
<TD COLSPAN="2"> </TD>
</TR>
<TR>
<TD COLSPAN="2"><STRONG>clsUp 特性 </STRONG>
</TD>
</TR>
<TR>
<TD> </TD>
<TD><P><STRONG>版本更新</STRONG><BR>
无惧0.96 第一个公开版本,以新的解析方法达到速度上的一个提升,修改稻香老农的无组件上传类,以达到完全兼容。</P>
<P><BR>
无惧1.0
发现原版中一个无法避免的BUG,会导至黑客利用服务器在上传其间会占用100%CPU资源来达到拒绝服务攻击,故修改了原来的设用方法,增加一个GetData来在实际上传数据前对上传文件的大小进行判断,防止被上传超大文件。至于其它的改变,忘掉了。</P>
<P><BR>
无惧1.2 修改了1.0中的一些错误命名(俺的英语不好),整理部分代码和加入更多对代码的注释。</P>
<P><BR>
无惧2.0
更加稳定和更安全,加入了上传类型的黑白名单,自动保存,修改了文件类中的一个属性,原为FileType现在改为FileMIME,增加了几个常用的方法。</P>
<P>先锋ver2004 彻底解决黑客抓包嗅探本地伪装上传IP包突破文件名、路径的特大漏洞(参考附件),此为最安全版本。<BR>
</P>
<P><STRONG>使用中的一些问题解答</STRONG></P>
<P>1、什么时候用AutoSave和SaveToFile?<BR>
AutoSave是自动生成新的文件名以避免与服务器上的原文件同名,而SaveToFile则是覆盖存在的文件,所以,如果你上传的文件需要覆盖原文件的时候,那么就调用SaveToFile,如果你上传的文件不需要覆盖存在的文件,那么就调用AutoSave,该函数会返回所保存的文件名。</P>
<P>2、为什么不提供自全部保存?<BR>
我不太相信大家用上传类时不需要对文件进行处理,那么提供全部保存与分别保存并没有什么太大的区别,在能少不多的情况下,我没有加入这个功能。</P>
<P>3、为什么我保存的时候会提示“该类型不允许上传呢”?我没有执行判断啊!<BR>
这是因为程序内部进行了判断,为了防止由于外部调用代码的BUG而导至判断上传类型失效,在内部的保存和取得数据都自动进行了文件类型的判别,如果黑名单存在,则白名单不起作用,这是为了方便一些程序的使用,因为有些时间只需要禁止几个上传类型即可,而不需要对每个上传类型进行判别。</P>
<P><font color="#FF0000">4、先锋2004怎么防黑的?能具体讲一下吗?<br>
<br>
——前一阵子出了个天字号特大漏洞,无数网站被非法上传ASP木马(尤其是动网论坛),问题主要是出在电脑不能正确判断含有“\0”二进制字符文件名或路径,可以本地抓包嗅探流文件并用二进制编辑器伪装IP包通过网络军刀上传(黑到这个份上,真是聪明绝顶),现在这个问题依然广泛存在,现在我们从类本身将此隐患彻底根除,就比较安全了。详细方法见附件,请你细细体会。</font></P>
<P><STRONG>关于网友的一些问题</STRONG></P>
<P>1、为什么上传的时候会出现无效页?<BR>
这是因为IE的BUG所导至的,目前尚没有更好的解决方法,原理是:当客户端提交表单时,IE会首先发把上传的总大小传到服务器,而这时服务器开始执行ASP代码,当运行到GetData方法时,会首先判断上传的总大小是为超过程序预设大小,如果没有,则开始执行上传,这时IE才真正开始上传数据,但是如果上传的总大小为超过程序预设大小,那么程序自动放弃读取并退出执行,这时上传并没有真正开始,虽然服务器返回了错误信息给IE,但是IE由于设计当初没有考虑到服务器会拒绝表单的上传,故IE会继续等待服务器的上传回应,由于服务器已经终止上传,IE就会以为服务器没有响应而出现无效页的错误了。</P>
<P>2、为什么从1.2马上升到了2.0?好像代码改得不多啊!<BR>
这是因为大家都喜欢高版本,我巴不得改为7.0呢,那样大家都会觉得这个版真高级。。。。-_-||</P>
<P><font color="#FF0000">3、为什么先锋2004版申明“版权没有、盗版不究”呢?<br>
<br>
——因为这个版权本来就是梁无惧的,本人只是稍作修改,补上了特大漏洞,为了尊重梁前辈,所以就这样吧!嘿嘿!梁前辈不要怪我哦。(孙立宇)</font></P>
</TD>
</TR>
<TR>
<TD COLSPAN="2"><P> </P>
</TD>
</TR>
<TR>
<TD COLSPAN="2"><STRONG>使 用 示 例</STRONG></TD>
</TR>
<TR>
<TD COLSPAN="2"><P>上传文件的表单要加入enctype="multipart/form-data"属性,即<BR>
<form name="form1" method="post" action="" enctype="multipart/form-data"><BR>
<input type="text" value="1" name="name"><BR>
<input type=file name="img"><BR>
<input type=submit name="submit" value="提交">
<BR>
</form><BR>
</P>
<P>
在执行上传的ASP页<BR>
<SPAN CLASS="style1">'包含类文件</SPAN><BR>
<!-- #include file="clsUp.asp" --><BR>
dim upfile<BR>
dim SaveFilename
<BR>
<SPAN CLASS="style1">'建立上传对象</SPAN><BR>
set upfile=new clsUp
<BR>
<SPAN CLASS="style1">'取得上传数据,限制最大上传10M 计算方法为 10240000/1000000=10.24M<BR>
</SPAN>
upfile.GetData (10240000)<BR>
<FONT COLOR="#0000ff">'判决是否出错</FONT><BR>
if upfile.isErr then<BR>
select case upfile.err<BR>
case 1<BR>
Response.Write "你没有上传数据呀???是不是搞错了??"<BR>
case 2<BR>
Response.Write "你上传的文件超出我们的限制,最大10M"<BR>
end select<BR>
else<BR>
<SPAN CLASS="style1"> '执行保存文件代码</SPAN><BR>
upfile.SaveToFile "img","c:\"&upfile.file("img").filename<BR>
<SPAN CLASS="style1">'执行自动保存文件代码,SaveFilename为保存的文件名</SPAN><BR>
SaveFilename=upfile.AutoSave "img","c:\"<BR>
<SPAN CLASS="style1"> '销毁对像</SPAN><BR>
set upfile=nothing<BR>
end if</P>
</TD>
</TR>
<TR>
<TD COLSPAN="2"><P> </P>
</TD>
</TR>
<TR>
<TD COLSPAN="2">目录下包含了一个完整的示例,分别<A HREF="example/upfiletodb.asp">存到数据库</A>及<A HREF="example/upfiletofile.htm">存为文件</A>,详细请参考.</TD>
</TR>
<TR>
<TD COLSPAN="2"> </TD>
</TR>
<TR>
<TD COLSPAN="2"><STRONG>孙立宇 于2004年10月15日修改</STRONG></TD>
</TR>
</TABLE>
<P> </P>
<P> </P>
<P>
</P>
<DIV ALIGN="right">
<P> </P>
</DIV>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?