無組件圖片與文本同步存入數據庫的最簡單的辦法

無組件圖片與文本同步存入數據庫的最簡單的辦法
動感教育網 發佈日期:2001-7-17 字數:4798

一:前言

首先,沒有料到圖片與文本的上傳會引起這麼大的注意。上一篇貼子(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")
%>

(全文完:希望本文能幫助那些急於想解決本類問題的網友。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章