非常简单实用的ASP图片上传代码问题!!!!急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

silencepen 2006-04-24 12:46:38
为什么我运行时会出现错误
提示如下:
错误类型:
Microsoft VBScript 运行时错误 (0x800A000D)
类型不匹配: 'imageup'
/fenqiu/uptest/uptext.asp, 第 27 行
说明:第27行的代码如下:
response.binarywrite imageup(formsize,formdata) '这里是显示图像。表示成功!
急求高手帮忙解决!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
万分感谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
整个源代码如下:

转来的,可以用
一:前言

首先,没有料到图片与文本的上传会引起这么大的注意。上一篇贴子(Id=435906)贴出后,有不少人来信说看不懂。或
是仍然不能实现。我就以一种完全简单的手法。完成无组件的文本与图片上传数据库所有过程。希望能帮助所有对此有疑
问的网友。

二:准备工作

按照惯例,我先将我的测试环境告诉大家。
系统:Win98se + pws + asp
编程环境:Visual Interdev 6.0
数据库:Access2000 (因为网友问的最多的都是Access2000的问题。)
建一个库:access2000中,先建好一个Test.mdb的数据库。具体有四个字段。
id | text1 | text2 | img
自动编号 文本 文本 OLE对象 ’如果是sql server 则选择(image即可)

三:Are you ready ,Go!!!

3-1.建上传表单:
我们知道,图像与文本是两种不同制式的文件(二进制,流式文本)而如果要同一表单提交的话,(file格式提交)则
我们获取时就不能用原来的方法request.form而必须用equest.TotalBytes来获得所有的提交资料。但这时两种格式的文件
混合在一起比较难分。我的上一贴已经告诉大家用二进制的方法来分开这些资料。但十分麻烦,要用到许多二进值的函
数,所以许多网友来信问我有没有更简单的方法,好。我可以告诉大家,有!而且保证下面的方法保证一学就会。(这种方
法很另类但伟人说过白猫,黑猫。能上网的就是好猫!)

upload.asp(具体代码如下)

<% @ language=vbscript %>
<html>
<head>
<meta name="VI60_defaultClientScript" content="VBScript">
<title> File Upload </title>
<script ID="clientEventHandlersVBS" LANGUAGE="vbscript">
<!--
Sub form2_onsubmit //** 这里是关键,当form2在提交的过程中时,即活form1的提交
form1.submit //**所以我们这里用了两个表单,但只用一个提交就可以了。
End Sub
-->
</script>
</head>
<body>

<form name="form1" ENCTYPE="multipart/form-data" ACTION="upimage.asp" METHOD="POST" target="_blank">
Please choose a picture to upload: <br/>
<input NAME="picture" TYPE="FILE"> <br/>
</form>

<form name="form2" action="uptext.asp" method="post">
<input type="text" name="text1"><br/>
<input type="text" name="text2"><br/>
<input type="submit" value="提交">
</form>

</body>
</html>

3-2 兵分两路来处理数据。
首先,文本很简单。

uptext.asp (代码如下)

<% @ language=vbscript %>
<%
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")

text1=request.form("text1")
text2=request.form("text2")
response.write text1
response.write text2

set rs=Server.CreateObject("adodb.recordset")
sql="SELECT top 1 * FROM imgtable ORDER BY id DESC" ’这里的意思是选择最后一个Id,既刚刚被改动
rs.Open sql,strconn,1,3 ’就是你上传的图像的两个文本字段。

rs("text1")=text1 ’注意,这里是改动不是添加,所以不用addnew。
rs("text2")=text2
rs.Update
rs.Close
%>
接着,来处理图像。
upimage.asp (具体代码如下)

<%
FormSize = Request.TotalBytes ’得到数据
FormData = Request.BinaryRead( FormSize )

function ImageUp(formsize,formdata) ’这个函数的功能是截取其中的图像部分。
bncrlf=chrb(13) & chrb(10) ’做成函数后。以后你可以自己随意使用了。
divider=leftb(formdata,instrb(formdata,bncrlf)-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
imageup=midb(formdata,datastart,dataend)
end function

Image=ImageUp (FormSize,Formdata) ’这里就是图像部分了。

set rs=server.CreateObject("adodb.recordset")
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")
sql="SELECT * FROM imgtable"
rs.Open sql,strconn,1,3

rs.AddNew ’因为表单二在表单一提交的过程中下提交了。
rs("img").appendchunk Image ’所以这里是添加。
rs.Update
rs.Close


response.contenttype="image/gif"
response.binarywrite imageup(formsize,formdata) ’这里是显示图像。表示成功!

%>

啊?!?!原来如此简单!

四:“显示,我要同页显示”
终于完成了图文同步提交。(真的是同步吗?不是吗?是吗? 唉,我们只是为了解决问题。何必当真哪?不
是 吗?)
现在我们还要让他同页显示出来。其实,这是同样的思路。我们也用两页来完成。

主页面:show.asp

<%@ Language=VBScript %>
<%
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")

set rs=Server.CreateObject("adodb.recordset")
sql="SELECT top 1 * FROM imgtable ORDER BY id DESC"
rs.Open sql,strconn,1,3
%>
<html>
<body>
以下是你的上传资料。<br/>
文本一:<% Response.Write rs("text1") %><br/>
文本二:<% Response.Write rs("text2") %><br/>

你的图像:
<img src=showimg.asp?id=<%=rs("id")%>> ’注意这里,这才是关键。他可以实现网页图像与文本
</body> ’共存。
</html>

幕后页面:showimg.asp (说他是幕后的页面,因为他潜伏在主页面里。看上是一个页面一样)

<%@ Language=VBScript %>
<%
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")
id=Request("id")
set rs=server.CreateObject("adodb.recordset")
sql="SELECT * FROM imgtable where id="&id
rs.Open sql,strconn,1,3
response.contenttype="image/gif"
Response.BinaryWrite rs("img")
%>

(全文完:希望本文能帮助那些急于想解决本类问题的网友。)
...全文
457 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gan878 2006-05-01
  • 打赏
  • 举报
回复
啊!~~我也要个研究研究啊!~gan878@163.com~!
谢谢啊~!
liuph3000 2006-04-29
  • 打赏
  • 举报
回复
mark
飞天鼠 2006-04-28
  • 打赏
  • 举报
回复
我有问题问一下
function ImageUp(formsize,formdata) ’这个函数的功能是截取其中的图像部分。
bncrlf=chrb(13) & chrb(10) ’做成函数后。以后你可以自己随意使用了。
divider=leftb(formdata,instrb(formdata,bncrlf)-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
ImageUp=midb(formdata,datastart,dataend)
end function
这个函数我不是很明白,特别是第三条语句,为什么要两个bncrlf,后面还要加4,是怎么算的,能帮我解释一下吗?
谢谢!
邦迪代驾 2006-04-27
  • 打赏
  • 举报
回复
gog_125@163.com
我也要
wwwcyq 2006-04-27
  • 打赏
  • 举报
回复
我也要cyq_110126@163.com
雅彦 2006-04-27
  • 打赏
  • 举报
回复
response.contenttype="image/gif"
response.binarywrite imageup(formsize,formdata) ’这里是显示图像。表示成功!
这句要去掉

response.contenttype="image/gif"
Response.BinaryWrite rs("img")
这两句需要修改

改动如上
雅彦 2006-04-27
  • 打赏
  • 举报
回复
upimage.asp (具体代码如下)

<%
FormSize = Request.TotalBytes ’得到数据
FormData = Request.BinaryRead( FormSize )

function ImageUp(formsize,formdata) ’这个函数的功能是截取其中的图像部分。
bncrlf=chrb(13) & chrb(10) ’做成函数后。以后你可以自己随意使用了。
divider=leftb(formdata,instrb(formdata,bncrlf)-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
ImageUp=midb(formdata,datastart,dataend)
end function

Image=ImageUp (FormSize,Formdata) ’这里就是图像部分了。

set rs=server.CreateObject("adodb.recordset")
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")
sql="SELECT * FROM imgtable"
rs.Open sql,strconn,1,3

rs.AddNew ’因为表单二在表单一提交的过程中下提交了。
rs("img").appendchunk Image ’所以这里是添加。
rs.Update
rs.Close
%>



幕后页面:showimg.asp (说他是幕后的页面,因为他潜伏在主页面里。看上是一个页面一样)

<%@ Language=VBScript %>
<%
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")
id=Request("id")
set rs=server.CreateObject("adodb.recordset")
sql="SELECT * FROM imgtable where id="&id
rs.Open sql,strconn,1,3
Response.ContentType="image/*"
formsize=rs("img").ActualSize
Response.BinaryWrite rs("img").getChunk(formsize)
rs.close
strconn.close
set rs=nothing
set strconn=nothing
%>
mhxz568 2006-04-24
  • 打赏
  • 举报
回复
邮件 已发出,请注意查收
silencepen 2006-04-24
  • 打赏
  • 举报
回复
谢谢!
silencepen 2006-04-24
  • 打赏
  • 举报
回复
silence-pen@163.net
mail@rybkids.com
mhxz568 2006-04-24
  • 打赏
  • 举报
回复
e-mail多少,我发个成功上传的图片到数据库的代码给你好了,你拿着修改下参数,也是这种格式的
绝对可以使用,后台完全破解! 一、在修改文件时,如何才能在用dreamweaver 软件打开时文件是可视化的? 方法: 1、首先打开源文件(这时你会看到:"对不起,你没有执行该操作的权限", 等字样,不要请往下做。): 2、切换到代码视图 3、剪切前面一些代码<!--#includefile="char.inc"--> 将这些代码先保存起来待修改完后再加回来原处, 或者先注释掉这段代码,修改好后恢复即可。 4、切换加窗口视图,这时你发现页面可视,修改起来就方便多了。 5、修改完页面后,将刚才剪切掉的代码<!--#includefile="char.inc"--> 加回原处。OK!可以预览了。 二、如何修改超级用户的用户名与密码 与 登录? 系统默认的前台发文用户是admin 密码admin. 1、登录后可在用户管理里修改密码或者在个人资料里修改密码。 但不可以修改默认前台用户的用户名admin。 2、在超级管理里修改超级管理的用户名与密码,但对应前台发文用户admin不可改 (注:必须与前台发文用户对应否则超级管理员无法登录)。 此网站需要两次登陆,第一次登陆的是前台用户,第二次登录的时候是超级用户,登录了两次才可以进行 系统所有的设置,在修改密码的时候用户管理里面修改的只是第一次登录的密码,如果没有在超级用户里面修改此 用户的密码,第2次登陆了的密码还是原来的,不变。 3、增加超级管理员的方法。 a、先增加前台发文普通用户,再将其设为系统用户 b、在超级管理里增加一个超级管理员,对应前台发文用户为刚增加的前台普通用户名。 4、超级管理员登录方法。 a、先登录普通前台发文用户。 b、再登录对应的超级管理员。 三、如何修改版权信息? 1、后台版本信息修改 wygkcn_SystemSave.asp文件 把下面改成自己需要的信息 if DbType="ACCESS" then version="学校网站管理系统Div+Css商业正式版" end if if DbType="MSSQL" then version="学校网站管理系统Div+Css商业正式版" end if if DbType="MYSQL" then version="学校网站管理系统Div+Css商业正式版" 2、其他页面版权调用的是数据库字段,打开数据库找到wygkcn_System 相关的字段,里面有ver 和copyright 等等版权信息,把里面的信息改成自己需要的即可。 四、如何让首页的图片报道的5个幻灯轮显图片出现? 1、进去后台添加5个新闻,并且在新闻里面插入图片,同时设置此条新闻为推荐。也就是至少5个插入了图片的新闻,并且设置为推荐了,才会调用这些新闻的图片出现在新闻报道里面。 五、为什么我的网站栏目修改没有反应,数据都不能修改,图片不能上传? 1、那是因为你的测试硬盘是ntfs的需要设置写入权限,如果是fat32就不需要,可以直接测试。 解决方法:   (1)检查是否在IIS中对整个网站打开了“写入”权限,而不仅仅是数据库文件。   (2)检查是否在WIN2000的资源管理器中,将网站所在目录对EveryOne用户打开所有权限。具体方法是:打开“我的电脑”----找到网站所在文件夹----在其上点右键----选“属性”-----切换到“安全性”选项卡,在这里给EveryOne用户所有权限/给Internet来宾帐户所有权限。   注意: 如果你的系统是XP,请先点“工具”----“文件夹选项”----“查看”-----去掉“使用简单文件共享”前的勾,确定后,文件夹“属性”对话框中才会有“安全性”这一个选项卡。 (3)在站点文件夹上点右键--->共享和安全--->Web共享(安装IIS后会有此选项卡)--->设置共享位置--->共享文件夹--->设置相应的读写权限--->然后点确定。 注意事项: 1、硬盘为NTFS格式的时候,如果你的数据库没有读写权限,数据库不能更新。 请设置文件所在硬盘的属性->安全属性标签,设置成evryone为完全控制。 如没有看到evryone项, 请添加->搜索->选择evryone确定。 2、windowsXP中硬盘为NTFS显示“安全”选项卡的方法: 打开“我的电脑”选择工具菜的“文件夹选项”。在对话筐中单击“查看” 选项卡去掉使用简单文件共享(推荐) 3、IIS下网站没有写入权限问题(站点设置问题)在windows XP+IIS 环境下ACCESS数据库只有读权限的解决方法: 在站点文件夹上点右键--->共享和安全--->Web共享(安装IIS后会有此选项卡)--->设置共享位置--->共享文件夹--->设置相应的读写权限--->然后点确定。 再试试,该文件夹下的网站及数据库就有读写权限了,该情况目前只在WIN XP下有,win 2003下目前没发现次问题。 六、后台登录地址? 后台登录地址: /login.asp 用户名:wmgov 密 码:wmgov.cn 七、sql怎么设置? 默认是accse的 需要设置sql必须改链接文件 Conn.asp ConnUser.asp 原来的是 'DbType = "MSSQL" '链接MSSQL数据库 'DbType = "MYSQL" '链接MYSQL数据库 DbType = "ACCESS" '链接ACCESS数据库 需要改为 DbType = "MSSQL" '链接MSSQL数据库 'DbType = "MYSQL" '链接MYSQL数据库 'DbType = "ACCESS" '链接ACCESS数据库 用哪个前面就不需要逗号 另外 if DbType="MSSQL" then ConnStr = "driver={SQL Server};server=192.168.1.200;uid=sa;pwd=123456;database=8014" server=192.168.1.200表示数据库的所在电脑ip地址,如果本机就127.0.0.1 uid=sa数据密码 pwd=123456 数据库用户名 ; database=8014 数据库库名,如果不想改这些文件,你在sql2000里面添加数据的时候 就需要把 数据库密码 用户名 数据库名这样设置,否则你设置其他的就必须改这些信息,改为你设置的。 八、菜单导航怎么改? 1、顶部的网上报名,专题报道,图片新闻,网站地图,联系我们都在后台系统配置 网站属性 自定义顶部(TOP)菜单 里面修改 自定义底部(BOTTOM)菜单 可以修改网站底部 专题报道 图片新闻 网站地图 联系我们 社区论坛 等等文字信息。 2、栏目菜单需要打开top.asp文件找到相关div ul li 的css样式写的菜单,改汉字栏目名称,和超级链接地址。不知道栏目的链接 地址,可以再后台此栏目下面发表几个文章,然后打开网站,在文章顶部找到 您的位置 点击此栏目 就可以知道栏目的超级链接地址。 改菜单一定要按照原来的顺序和规则,如果想要调整间距 ,可以打开css文件里面的Wygkcn_Home.css 找到/*导航菜单样式表*/进行 修改。 九、顶部最新推荐,教师专栏,学生专栏,家长专栏怎么改? 打开wygkcnzwb_Daodu.asp 文件改汉字,然后改超级链接,然后在后台改栏目名称,如果你把栏目名称删去了,那么这个调用的id 也就不存在了,需要自己重新调用,(E_Typeid=2 and E_bigclassid=41) 网页里面有类似的参数,代表的是调用一级栏目为2,2级 栏目为41 的文章,如果你需要调用一级栏目为3 ,2级栏目为4就是(E_Typeid=3 and E_bigclassid=4) 改下id数就行了。 十、为什么文章页面顶部现在作者为网域高科? 打开wygkcn_ShowArticle.asp 找到以下代码,因为下面写的是如果作者为空,则显示为网域高科,所以你必须添加文章的时候写上作者, 如果不想写,就把这个代码的网域高科改为自己需要的,每次后台编辑器如果没有写作者会默认赋值为你改的信息。 作者:广州网域高科 |

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧