無(wú)組件圖片與文本同步存入數(shù)據(jù)庫(kù)的最容易的方法
發(fā)表時(shí)間:2023-08-20 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]一:前言 首先,沒(méi)有料到圖片與文本的上傳會(huì)引起這么大的注意。上一篇貼子(Id=435906)貼出后,有不少人來(lái)信說(shuō)看不懂;蚴侨匀徊荒軐(shí)現(xiàn)。我就以一種完全簡(jiǎn)單的手法。完成無(wú)組件的文本與圖片上傳數(shù)...
一:前言
首先,沒(méi)有料到圖片與文本的上傳會(huì)引起這么大的注意。上一篇貼子(Id=435906)貼出后,有不少人來(lái)信說(shuō)看不懂;
是仍然不能實(shí)現(xiàn)。我就以一種完全簡(jiǎn)單的手法。完成無(wú)組件的文本與圖片上傳數(shù)據(jù)庫(kù)所有過(guò)程。希望能幫助所有對(duì)此有疑
問(wèn)的網(wǎng)友。
二:準(zhǔn)備工作
按照慣例,我先將我的測(cè)試環(huán)境告訴大家。
系統(tǒng):Win98se + pws + asp
編程環(huán)境:Visual Interdev 6.0
數(shù)據(jù)庫(kù):Access2000 (因?yàn)榫W(wǎng)友問(wèn)的最多的都是Access2000的問(wèn)題。)
建一個(gè)庫(kù):access2000中,先建好一個(gè)Test.mdb的數(shù)據(jù)庫(kù)。具體有四個(gè)字段。
id text1 text2 img
自動(dòng)編號(hào) 文本 文本 OLE對(duì)象 ’如果是sql server 則選擇(image即可)
三:Are you ready ,Go!!!
3-1.建上傳表單:
我們知道,圖像與文本是兩種不同制式的文件(二進(jìn)制,流式文本)而如果要同一表單提交的話,(file格式提交)則
我們獲取時(shí)就不能用原來(lái)的方法request.form而必須用equest.TotalBytes來(lái)獲得所有的提交資料。但這時(shí)兩種格式的文件
混合在一起比較難分。我的上一貼已經(jīng)告訴大家用二進(jìn)制的方法來(lái)分開(kāi)這些資料。但十分麻煩,要用到許多二進(jìn)值的函
數(shù),所以許多網(wǎng)友來(lái)信問(wèn)我有沒(méi)有更簡(jiǎn)單的方法,好。我可以告訴大家,有!而且保證下面的方法保證一學(xué)就會(huì)。(這種方
法很另類但偉人說(shuō)過(guò)白貓,黑貓。能上網(wǎng)的就是好貓。
upload.asp(具體代碼如下)
<% @ language=vbscript %>
<html>
<head>
<meta name="VI60_defaultClientScript" content="VBScript">
<title> File Upload </title>
<script ID="clientEventHandlersVBS" LANGUAGE="vbscript">
<!--
Sub form2_onsubmit //** 這里是關(guān)鍵,當(dāng)form2在提交的過(guò)程中時(shí),即活form1的提交
form1.submit //**所以我們這里用了兩個(gè)表單,但只用一個(gè)提交就可以了。
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 兵分兩路來(lái)處理數(shù)據(jù)。
首先,文本很簡(jiǎn)單。
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" ’這里的意思是選擇最后一個(gè)Id,既剛剛被改動(dòng)
rs.Open sql,strconn,1,3 ’就是你上傳的圖像的兩個(gè)文本字段。
rs("text1")=text1 ’注意,這里是改動(dòng)不是添加,所以不用addnew。
rs("text2")=text2
rs.Update
rs.Close
%>
接著,來(lái)處理圖像。
upimage.asp (具體代碼如下)
<%
FormSize = Request.TotalBytes ’得到數(shù)據(jù)
FormData = Request.BinaryRead( FormSize )
function ImageUp(formsize,formdata) ’這個(gè)函數(shù)的功能是截取其中的圖像部分。
bncrlf=chrb(13) & chrb(10) ’做成函數(shù)后。以后你可以自己隨意使用了。
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 ’因?yàn)楸韱味诒韱我惶峤坏倪^(guò)程中下提交了。
rs("img").appendchunk Image ’所以這里是添加。
rs.Update
rs.Close
response.contenttype="image/gif"
response.binarywrite imageup(formsize,formdata) ’這里是顯示圖像。表示成功!
%>
。浚?!原來(lái)如此簡(jiǎn)單!
四:“顯示,我要同頁(yè)顯示”
終于完成了圖文同步提交。(真的是同步嗎?不是嗎?是嗎? 唉,我們只是為了解決問(wèn)題。何必當(dāng)真哪?不
是 嗎?)
現(xiàn)在我們還要讓他同頁(yè)顯示出來(lái)。其實(shí),這是同樣的思路。我們也用兩頁(yè)來(lái)完成。
主頁(yè)面: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")%>> ’注意這里,這才是關(guān)鍵。他可以實(shí)現(xiàn)網(wǎng)頁(yè)圖像與文本
</body> ’共存。
</html>
幕后頁(yè)面:showimg.asp (說(shuō)他是幕后的頁(yè)面,因?yàn)樗麧摲谥黜?yè)面里。看上是一個(gè)頁(yè)面一樣)
<%@ 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")
%>
(全文完:希望本文能幫助那些急于想解決本類問(wèn)題的網(wǎng)友。)