给单位网站文章发布系统增加一个不完美的文件上传功能

一直觉得单位网站的文章发布系统缺少文件上传功能是个遗憾,不过因为用的是asp来建站——而我的asp知识早忘得差不多了——所以没有点行动表示。但是这几天心血来潮,试着弄了一下:

分析:如果修改数据库的话——打开数据库发现n个表,没有文档改遭了我不就摊起了,毕竟这网站不是玩具。倒是发现web maker没有对html代码进行过滤,虽然潜在危险倒也方便我修改,嘻嘻,就这样办了。

方案:用代码生成文件或图片添加码直接对页面内容进行添加。

步骤1:找出需要修改的文件(添加、修改删除)。采用表单传递数据的方法上传文件。在这两个页面内加入iframe,把文件上传组件放入另一个页面并嵌套进来。

upframewin.asp代码

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
background-color: #999999;
}
-->
</style>
<script>
function processUpFile() //上传按钮的事件
{
filepath=document.all.file1.value;
if(filepath==""){
alert("请浏览选择上传文件!");
return;
}//end if
reg=/^[a-zA-Z]/:{1}//{1}(/w|/s|/S|/W)+/.{1}/w+$/;
if(reg.test(filepath)){
document.form1.action="upload.asp?file1="+ filepath.replace(g,"")
document.form1.Submit.value="上传中..";
document.form1.Submit.disabled=true;
document.form1.submit();
}else{
alert("请设置正确的上传文件!");
}

}


</script>
</head>

<body>
<form name="form1" method="post" enctype="multipart/form-data" action="upload.asp">
<table width="600">
<tr>
<td>
<input type="file" name="file1" size="40" class="smallinput" maxlength="255" >
<input type="button" name="Submit" value=" 上 传 " onClick="processUpFile()">
</td>
</tr>
</table>
</form>
</body>
</html>

步骤:上传文件页面upload.asp代码

 

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%
 server.scripttimeout=600
 dim upFileStatus '上传状态
 dim upFileName '生成的文件名
 dim upFileExt '上传文件的后缀
 dim maxSize '上传文件最大值
 dim formsize '表单数据大小
 dim fileSize'上传文件的大小
 dim getFileName '文件名
 maxSize=clng(10240)
 upFileStatus=false
 getFileName=request.QueryString("file1")
 formsize=Request.TotalBytes
 filesize=(formsize/1024)
 if fileSize>maxSize then
  response.Write("<script>alert('上传文件的大小超过了10M限制!');</script>")
  response.Write("<script>location.replace('upframewin.asp');</script>")
 elseif fileSize<=0 then
  response.Write("<script>alert('请设置正确的上传文件!');</script>")
  response.Write("<script>location.replace('upframewin.asp');</script>")
 else
  upFileFunc()
 end if
 
 
 
 function upFileFunc() '上传文件函数
  on error resume next
  formdata=Request.BinaryRead(formsize)
  set obs=server.CreateObject("adodb.stream")
  obs.mode=3
  obs.type=1
  obs.open
  obs.write(formdata)'读取所有上传的数据
  
  upFileExt=getFileExtName(getFileName)
  
  CLStr=ChrB(13)&ChrB(10)
  datastart=InStrB(formdata,CLStr&CLStr)+3 '确定文件的开始位置.分隔符与下一段数据描述部分由一个回车分隔,与数据描述与数据内容之间由两个回车分隔
  divstr=LeftB(formdata,clng(InStrB(formData,CLStr))-1) '求分隔符
  datasize=InStrB(datastart+1,formdata,divstr)-datastart-3 '这里有点想不明白
  formdata1=Midb(formdata,datastart,datasize) '真正的文件数据
  set obd=server.CreateObject("adodb.stream")
  obd.type=1
  obd.mode=3
  obd.open
  obs.position=datastart
  obs.copyto obd,lenb(formdata1)
  
  Randomize timer()
  upFileName=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&Clng( Rnd()*9999)&"."&upFileExt
  on error resume next
  obd.SaveToFile Server.MapPath("uploadimages/"+ upFileName),2
  upFileStatus=true
   
  if err.number<>0 then
    response.Write("<script>alert('文件上传失败!')</script>")
    upFileStatus=false
  end if
 end function
 
 function getFileExtName(fileName)'取得后缀名
  dim pos
  pos=instrrev(filename,".")
  if pos> 0 then
  getFileExtName=mid(fileName,pos+1)
  else
  getFileExtName=""
  end if
 end function
 
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>上传文件</title>
<style type="text/css">
<!--
body {
 background-color: #999999;
 margin-left: 0px;
 margin-top: 0px;
}
.style2 {font-size: 9pt}
-->
</style>
<script>
 <!--
function getFileName(nameStr)
{
    re=/([^//]+)/.{1}/w+$/; //匹配文件名(不含/)
    re.test(nameStr) ;
 return RegExp.$1
}
//-->
</script>
</head>

<body>

<br>
<p><span class="style2">       <strong>
  <%  if upFileStatus then
  response.Write("<script>alert('文件上传成功!')</script>")
%>
  <input type="hidden"  value="<%=upFileName %>" name="hidden1">
  <input type="hidden"  value="<%=getFileName %>" name="hidden2">
  <script>
var txtcontent=parent.document.all.txtcontent;
var upFileExt="<%=upFileExt %>";
var newaddtext
if(upFileExt=="bmp"||upFileExt=="jpg"||upFileExt=="gif"||upFileExt=="png")
 newaddtext="<br><img src='uploadimages/" + document.all.hidden1.value + "' border='0'>";
else
 newaddtext="<br>附件: <img src=pic/book.gif><a href='uploadimages/" + document.all.hidden1.value + "' target=_blank>" + getFileName(document.all.hidden2.value) + "</a>";
txtcontent.value=txtcontent.value + newaddtext;
txtcontent.focus();
</script>
  <% end if %>
    </strong></span>
<script>
    location.replace("upframewin.asp");
</script>
</p>
</body>
</html>

 

失败的是一旦上传大小超过限定大小页面就会出现“无法打开”的错误,虽然进行了判定,但始终未能够捕获……由于不影响正常使用就放上去了,呵呵^_^

有达人知道的告诉我。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
爱一网情深文件管理系统更新说明: 1.加入了文件搜索及快速打开功能,便于在众多的文件中快速找到想要的文件; 2.删除了部分冗余代码,修改美化了部分页面; 3.更正了因部分系统不支持导致的用户发布或下载文件后其它文件会消失的缺陷; 4.加入了禁止外部提交下载文件功能,有效保护系统安全; 5.更正了用户管理页面不能对用户进行分页显示的缺陷; 6.所有用户都可以自助修改资料,但无法修改用户名、权限,超级管理员则可以进行任何修改; 7.可在后台设置系统状态是打开还是关闭,选择关闭后超级仍然可以正常进入,但其它用户无法使用系统; 8.对部分功能进行了优化整合,使系统更小巧美观; 9.每个文件都可以记录用户下载情况,便于了解文件阅情况。   特性: 1.小巧实用的多用户文件管理系统,可设置多个管理员帐号; 2.可事先设置部门分类,将文件至指定分类,除高级和超级用户外,只有部门内的人员才能访问,其他人则无法下载,方便快捷; 3.开发了站内短消息系统,新用户注册后就会收到系统的消息确认,注册用户间可以相互发送消息,管理员则可以发4.送面对所有用户的系统消息; 5.系统会自动记录用户的操作及上或删除了什么文件; 6.设有一键备份及还原系统,备份数据后会在根目录下产生一个名为leasinWJData.rar的压缩包,只要有此文件存在,只需要点击一下还原,就可以还原到备份前的状态,此还原只针对上文件,用户数据不会受影响; 7.无需mysql支持,占用空间小; 8.当用户忘记密码时可自助找回密码,是一个很不错的系统; 此系统比较适合用作单位内部文件递,所以没有开放的注册口,所有用户需要管理员添加,如需要可以在下载后自己添加一个注册接口。   程序目录说明: 1.use为用户文件夹 2.file内为用户上文件 3.mydata/ml.dat为目录分类 4.mydata/wj.dat为上文件列表 5.record为记录用户操作的文件夹 后台管理帐号:admin 密码:123456     相关阅读 同类推荐:博客系统下载

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值