formDataformdata 上传图片片数据库没有收到数据

3.7 ASP代码实现图片上传并存入数据库中 分享 - 呢小3.7 ASP代码实现图片上传并存入数据库中点击复制内容
用ASP编写使用光阴长了,难免会遇到各式各样的,其中
  关于如何文件到服务器恐怕是遇见最多的了,,尤其是,比如你想要在自己的社区里面类似网易虚拟社区供给的&每日一星&的功能,就要供给给网友上传照片的功能。上传文件到服务器可以各种免费的文件上传组件,起来功能虽然很强大,但是由于很多情况下,我们只能应用免费的支持ASP的或者租用别人的虚拟,对于第一种情况,我们根本就没有可能来应用文件上传组件;至于第二种情况,我们也要付出不少的&银子&才可以。除非你拥有自己的虚拟主机,你就可以随便的在服务器上面安装自己所需要的组件,这种情况对于大多数仁攀来说是可望而不可及的。那我们就没有办法了吗?呵呵,答案是肯定的(当然是肯定的了,要不然我也没法写出这篇啊)。下面就让我们一起来应用纯ASP来的上传以及保存到的功能(顺便也实现显示中的到网页上的功能)。
  首先我们先来熟识一下将要应用的对象法子。我们用来获取上一个页面传递过来的数据一般是应用Request对象。同样的,我们也可以应用Request对象来获取上传上来的文件数据,应用的法子是Request.BinaryRead()。而我们要从数据库中读出来图片的数据显示到网页上面要用到的法子是:
  Request.BinaryWrite()。在我们得到了图片的数据,要保存到数据库中的时候,不可以直接应用Insert语句对数据库进行操作,而是要应用ADO的AppendChunk法子,同样的,读出数据库中的图片数据,要应用GetChunk法子。各个法子的具体语法如下:
* Request.BinaryRead语法:
variant = Request.BinaryRead(count)
返回值保存着从读取到数据。
指明要从读取的数据量大小,这个值小于或者等于应用法子
Request.TotalBytes得到的数据量。
* Request.BinaryWrite语法:
Request.BinaryWrite data
要写入到客户端涉猎器中的数据包。
* Request.TotalBytes语法:
variant = Request.TotalBytes
返回从客户端读取到数据量的字节数。
* AppendChunk语法
将数据追加到大型文本、二进制数据 Field 或 Parameter 对?
object.AppendChunk Data
object Field 或 Parameter 对象
Data 变体型,包孕追加到对象中的数据。
  应用 Field 或 Parameter 对象的 AppendChunk 法子可将长二进制或字符数据填写到对象中。在系统内存有限的情况下,可以应用 AppendChunk 法子对长整型值进行部分而非整个的操作。
* GetChunk语法
返回大型文本或二进制数据 Field 对象的整个或部分内容 。
variable = field.GetChunk( Size )
返回变体型。
Size 长整型表达式,等于所要检索的字节或字符数。
  应用 Field 对象的 GetChunk 法子检索其部分或整个长二进制或字符数据。在系统内存有限的情况下,可应用 GetChunk 法子处理部分而非整个的长整型值。
GetChunk 调用返回的数据将赋给&变量&。如果 Size 大于剩余的数据,则
GetChunk 仅返回剩余的数据而无需用空白填充&变量&。如果字段为空,则
GetChunk 法子返回 Null。
  每个后续的 GetChunk 调用将检索从前一次 GetChunk 调用停止处开始的数据。但是,如果从一个字段检索数据然后在当前记载中设置或读取另一个字段的值,ADO 将觉得已从第一个字段中检索出数据。如果在第一个字段上再次调用 GetChunk 法子,ADO 将把调用解释为新的 GetChunk 操作并从记载的起始处开始读取。如果其他 Recordset 对象不是首个 Recordset 对象的副本,则造访其中的字段不会破坏 GetChunk 操作。如果 Field 对象的 Attributes 属性中的 adFldLong 位设置为 True,则可以对该字段应用 GetChunk 法子。如果在 Field 对象上应用 Getchunk 法子时没有当前记载,将产生差错 3021(无当前记载)。接下来,我们就要来我们的数据库了,作为我们的数据库结构如下(Access97):
字段名称    类型    描述
  id    自动编号   主键值
img OLE对象   用来保存图片数据 
对于在MS SQL Server7中,对应的结构如下:
字段名称    类型    描述
  id     int(Identity) 主键值
img   image     用来保存图片数据 
  现在开始正式编写我们的纯ASP上传部分了,首先,我们有一个供给给用户的上传界面,可以让用户选择要上传的图片。代码如下
(upload.htm):
   ;form name=&mainForm& enctype=&multipart/form-data&
action=&pro
cess.asp& ;
    ;input type=file ;;;
   ;input type=submit name=ok value=&OK&;
  注意代码中黑色斜体的部分,一定要在Form中有这个属性,否则,将无法得到上传上来的数据。
  接下来,我们要在process.asp中对从涉猎器中获取的数据进行必要的处理,因为我们在process.asp中获取到的数据不仅仅包孕了我们想要的上传上来的图片的数据,也包孕了其他的无用的信息,我们需要剔除冗余数据,并将处理过的图片数据保存到数据库中,这里我们以Access97为例。具体代码如下(process.asp):
response.buffer=true
formsize=request.totalbytes
formdata=request.binaryread(formsize)
bncrlf=chrB(13) & chrB(10)
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)
datastart=instrb(formdata,bncrlf & bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
mydata=midb(formdata,datastart,dataend)
set connGraph=server.CreateObject(&ADODB.connection&)
connGraph.ConnectionString=&driver={Microsoft Access Driver (*.mdb)};DBQ=& &
server.MapPath(&images.mdb&) & &;uid=;PWD=;&
connGraph.Open
set rec=server.createobject(&ADODB.recordset&)
rec.Open &SELECT * FROM [images] where id is null&,connGraph,1,3
rec.addnew
rec(&img&).appendchunk mydata
rec.update
set rec=nothing
set connGraph=nothing
  好了,这下我们就把上传来的图片保存到了名为images.mdb的数据库中了,剩下的工作就是要将数据库中的图片数据显示到网页上面了。一般在HTML中,显示图片都是应用;;,也就是;IMG SRC=&图片路径&;,但是我们的图片是保存到了数据库中,&图片路径&是什么呢?呵呵,其实这个SRC属性除了指定路径外,也可以这样应用哦:
;IMG SRC=&showimg.asp?id=xxx&;
  所以,我们所要做的就是在showimg.asp中从数据库中读出来符合条件的数据,并返回到SRC属性中就可以了,具体代码如下(showimg.asp):
set connGraph=server.CreateObject(&ADODB.connection&)
connGraph.ConnectionString=&driver={Microsoft Access Driver (*.mdb)};DBQ=& &
server.MapPath(&images.mdb&) & &;uid=;PWD=;&
connGraph.Open
set rec=server.createobject(&ADODB.recordset&)
strsql=&select img from images where id=& & trim(request(&id&))
rec.open strsql,connGraph,1,1
Response.ContentType = &image/*&
Response.BinaryWrite rec(&img&).getChunk(7500000)
set rec=nothing
set connGraph=nothing
  注意在输出到涉猎器之前一定要指定Response.ContentType = &image/*&,以便正常显示图片。
  最后要注意的地方是,我的process.asp中作的处理没有考虑到第一页(upload.htm)中还有其他数据,比如;INPUT type=tesxt ;等等,如果有这些项目,你的process.asp就要注意处理掉不必要的数据。怎么样,其实上传图片并保存到数据库很简单吧,这样再也不用为自己的空间无法应用各类的上传组件发愁了吧。还等什么?赶快试一试吧。
来源:呢小如何使用multipart/form-data格式上传文件
有时,在网络编程过程中需要向服务器上传文件。Multipart/form-data是上传文件的一种方式。
Multipart/form-data其实就是浏览器用表单上传文件的方式。最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器。
表单形式上传附件
具体的步骤是怎样的呢?
首先,客户端和服务器建立连接(TCP协议)。
第二,客户端可以向服务器端发送数据。因为上传文件实质上也是向服务器端发送请求。
第三,客户端按照符合“multipart/form-data”的格式向服务器端发送数据。
Multipart/form-data的格式是怎样的呢?
既然Multipart/form-data格式就是浏览器用表单提交数据的格式,我们就来看看文件经过浏览器编码后是什么样子。
浏览器打开的表单
点击“Browse…”分别选择“unknow.gif”和“unknow1.gif”文件,点击“submit”按纽后,文件将被上传到服务器。
下面是服务器收到的数据:
服务器收到的数据
这是一个POST请求。所以数据是放在请求体内,而不是请求头内。
这行指出这个请求是“multipart/form-data”格式的,且“boundary”是 “---------------------------7db15a14291cce”这个字符串。
不难想象,“boundary”是用来隔开表单中不同部分数据的。例子中的表单就有 2 部分数据,用“boundary”隔开。“boundary”一般由系统随机产生,但也可以简单的用“-------------”来代替。
实际上,每部分数据的开头都是由&--& + boundary开始,而不是由 boundary 开始。仔细看才能发现下面的开头这段字符串实际上要比 boundary 多了个&“--”
紧接着 boundary 的是该部分数据的描述。
接下来才是数据。
“GIF”gif格式图片的文件头,可见,unknow1.gif确实是gif格式图片。
在请求的最后,则是&&--& + boundary + &--&&表明表单的结束。
需要注意的是,在html协议中,用&“/r/n”&换行,而不是&“/n”。
看过本文的人也看了:
我要留言技术领域:
你已经自动关注本知识库了哦!
确定要取消收藏吗?
删除图谱提示
你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示
无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示
你确定要删除该知识节点吗?图片上传保存到access数据库_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
图片上传保存到access数据库
上传于||暂无简介
你可能喜欢本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 formdata 上传图片 的文章

 

随机推荐