给单位网站文章发布系统增加一个不完美的文件上传功能
来源:互联网 发布:剑灵力士捏脸数据图 编辑:程序博客网 时间:2024/04/30 10:24
一直觉得单位网站的文章发布系统缺少文件上传功能是个遗憾,不过因为用的是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>
失败的是一旦上传大小超过限定大小页面就会出现“无法打开”的错误,虽然进行了判定,但始终未能够捕获……由于不影响正常使用就放上去了,呵呵^_^
有达人知道的告诉我。
- 给单位网站文章发布系统增加一个不完美的文件上传功能
- 利用lucene给网站、系统增加搜索功能
- [web] 给自己的网站增加转载功能
- 使用jQuery tag handler开发一个带有标签功能的文章发布系统
- 给PHPCMS V9 增加关闭网站功能
- 仿163的多文件上传带增加删除功能
- 给BLOG增加了一个在线音乐功能
- php简单的文件上传功能,不限制上传大小
- 给网站动态增加一个favicon
- 给ueditor增加删除文件功能
- 用Prismjs给自己的博客文章增加代码高亮功能
- 第3章 增加文件上传功能
- iis 7发布的网站,上传大文件时报错
- 给自己的网站加一个搜索功能代码
- 新闻文章发布系统功能说明
- 谁开发的“网站备案”系统,应该不给一分钱。
- 给树莓派增加一个Linux系统调用
- 给webkit增加一个系统事件
- 在ASP.NET中实现AJAX
- 一个不喝中国水的日本人 [转贴 ]
- 用asp实现的MD5加密(摘自网上)
- 在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库
- 从十大经典故事学管理之二
- 给单位网站文章发布系统增加一个不完美的文件上传功能
- 人之脆弱时
- JS实现“鼠标控制局部文字滚动效果”研究
- 用js实现字幕滚动效果.
- Asp.net檔案上傳與下載11/23
- 《Essential C++》中的一个简单例题
- 杂记8
- 应聘华为必看
- 男人在不同年龄时亲完女人的反映