相關(guān)資訊
- 《戰(zhàn)國(guó)無雙4-2》怎么換服裝?戰(zhàn)國(guó)無
- 關(guān)于責(zé)任的名言警句大全
- 《戰(zhàn)國(guó)無雙4-2》PC版如何聯(lián)機(jī)? 戰(zhàn)
- 戰(zhàn)國(guó)無雙4-2技能覺醒牛逼嗎 全新
- 《戰(zhàn)國(guó)無雙4-2》手柄無效怎么解決
- 戰(zhàn)國(guó)無雙4-2如何設(shè)置語言 戰(zhàn)國(guó)無雙
- 戰(zhàn)國(guó)無雙4-2怎么樣跳過進(jìn)入開場(chǎng)動(dòng)畫
- 什么是應(yīng)屆生畢業(yè)生
- 應(yīng)屆生簡(jiǎn)歷自我評(píng)價(jià)
- 應(yīng)屆生簡(jiǎn)歷怎么寫
本類常用軟件
-
福建農(nóng)村信用社手機(jī)銀行客戶端下載下載量:584204
-
Windows優(yōu)化大師下載量:416896
-
90美女秀(視頻聊天軟件)下載量:366961
-
廣西農(nóng)村信用社手機(jī)銀行客戶端下載下載量:365699
-
快播手機(jī)版下載量:325855
本文主要跟大家介紹到的是關(guān)于ASP實(shí)現(xiàn)上傳圖片功能的原理及示例說明,希望對(duì)大家有用。
用ASP編寫網(wǎng)站應(yīng)用程序時(shí)間長(zhǎng)了,難免會(huì)遇到各式各樣的問題,其中關(guān)于如何上傳文件到服務(wù)器恐怕是遇見最多的問題了,尤其是上傳圖片,比如你想要在自己的社區(qū)里面實(shí)現(xiàn)類似網(wǎng)易虛擬社區(qū)提供的“每日一星”的功能,就要提供給網(wǎng)友上傳照片的功能。上傳圖片文件到服務(wù)器可以使用各種免費(fèi)的文件上傳組件,使用起來功能雖然很強(qiáng)大,但是由于很多情況下,我們只能使用免費(fèi)的支持ASP的空間或者租用別人的虛擬空間,對(duì)于第一種情況,我們根本就沒有可能來使用文件上傳組件;至于第二種情況,我們也要付出不少的“銀子”才可以。除非你擁有自己的虛擬主機(jī),你就可以隨便的在服務(wù)器上面安裝自己所需要的組件,這種情況對(duì)于大多數(shù)人來說是可望而不可及的。那我們就沒有辦法了嗎?呵呵,答案是肯定的(當(dāng)然是肯定的了,要不然我也沒法寫出這篇文章啊)。下面就讓我們一起來使用純ASP代碼來實(shí)現(xiàn)圖片的上傳以及保存到數(shù)據(jù)庫(kù)的功能(順便也實(shí)現(xiàn)顯示數(shù)據(jù)庫(kù)中的圖片到網(wǎng)頁(yè)上的功能)。
首先我們先來熟悉一下將要使用的對(duì)象方法。我們用來獲取上一個(gè)頁(yè)面?zhèn)鬟f過來的數(shù)據(jù)一般是使用Request對(duì)象。同樣的,我們也可以使用Request對(duì)象來獲取上傳上來的文件數(shù)據(jù),使用的方法是Request.BinaryRead()。而我們要從數(shù)據(jù)庫(kù)中讀出來圖片的數(shù)據(jù)顯示到網(wǎng)頁(yè)上面要用到的方法是: class=code
Request.BinaryWrite()。在我們得到了圖片的數(shù)據(jù),要保存到數(shù)據(jù)庫(kù)中的時(shí)候,不可以直接使用Insert語句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,而是要使用ADO的AppendChunk方法,同樣的,讀出數(shù)據(jù)庫(kù)中的圖片數(shù)據(jù),要使用GetChunk方法。各個(gè)方法的具體語法如下:
*Request.BinaryRead語法:
variant=Request.BinaryRead(count)
參數(shù):
variant 返回值保存著從客戶端讀取到數(shù)據(jù)。
count 指明要從客戶端讀取的數(shù)據(jù)量大小,這個(gè)值小于或者等于使用方法Request.TotalBytes得到的數(shù)據(jù)量。
*Request.BinaryWrite語法:
Request.BinaryWritedata
參數(shù):data 要寫入到客戶端瀏覽器中的數(shù)據(jù)包。
*Request.TotalBytes語法:
variant=Request.TotalBytes
參數(shù):variant 返回從客戶端讀取到數(shù)據(jù)量的字節(jié)數(shù)。
*AppendChunk語法
將數(shù)據(jù)追加到大型文本、二進(jìn)制數(shù)據(jù)Field或Parameter對(duì)象。
object.AppendChunkData
參數(shù)
objectField或Parameter對(duì)象
Data變體型,包含追加到對(duì)象中的數(shù)據(jù)。
說明:使用Field或Parameter對(duì)象的AppendChunk方法可將長(zhǎng)二進(jìn)制或字符數(shù)據(jù)填寫到對(duì)象中。在系統(tǒng)內(nèi)存有限的情況下,可以使用AppendChunk方法對(duì)長(zhǎng)整型值進(jìn)行部分而非全部的操作。
*GetChunk語法
返回大型文本或二進(jìn)制數(shù)據(jù)Field對(duì)象的全部或部分內(nèi)容。
variable=field.GetChunk(Size)
返回值:返回變體型。
參數(shù):Size長(zhǎng)整型表達(dá)式,等于所要檢索的字節(jié)或字符數(shù)。
說明
使用Field對(duì)象的GetChunk方法檢索其部分或全部長(zhǎng)二進(jìn)制或字符數(shù)據(jù)。在系統(tǒng)內(nèi)存有限的情況下,可使用GetChunk方法處理部分而非全部的長(zhǎng)整型值。
GetChunk調(diào)用返回的數(shù)據(jù)將賦給“變量”。如果Size大于剩余的數(shù)據(jù),則GetChunk僅返回剩余的數(shù)據(jù)而無需用空白填充“變量”。如果字段為空,則GetChunk方法返回Null。
每個(gè)后續(xù)的GetChunk調(diào)用將檢索從前一次GetChunk調(diào)用停止處開始的數(shù)據(jù)。但是,如果從一個(gè)字段檢索數(shù)據(jù)然后在當(dāng)前記錄中設(shè)置或讀取另一個(gè)字段的值,ADO將認(rèn)為已從第一個(gè)字段中檢索出數(shù)據(jù)。如果在第一個(gè)字段上再次調(diào)用GetChunk方法,ADO將把調(diào)用解釋為新的GetChunk操作并從記錄的起始處開始讀取。如果其他Recordset對(duì)象不是首個(gè)Recordset對(duì)象的副本,則訪問其中的字段不會(huì)破壞GetChunk操作。
如果Field對(duì)象的Attributes屬性中的adFldLong位設(shè)置為True,則可以對(duì)該字段使用GetChunk方法。
如果在Field對(duì)象上使用Getchunk方法時(shí)沒有當(dāng)前記錄,將產(chǎn)生錯(cuò)誤3021(無當(dāng)前記錄)。
接下來,我們就要來設(shè)計(jì)我們的數(shù)據(jù)庫(kù)了,作為測(cè)試我們的數(shù)據(jù)庫(kù)結(jié)構(gòu)如下(access2000):
字段名稱 類型 描述
id 自動(dòng)編號(hào) 主鍵值
img OLE對(duì)象 用來保存圖片數(shù)據(jù)
對(duì)于在MSSQLServer7中,對(duì)應(yīng)的結(jié)構(gòu)如下:
字段名稱 類型 描述
id int(Identity) 主鍵值
img image 用來保存圖片數(shù)據(jù)
現(xiàn)在開始正式編寫我們的純ASP代碼上傳部分了,首先,我們有一個(gè)提供給用戶的上傳界面,可以讓用戶選擇要上傳的圖片。代碼如下
(upload.htm):
<html>
<body>
<center>
<form name="mainForm" enctype="multipart/form-data" action="process.asp" method=p
ost>
<inputtype=filename=mefile><br>
<inputtype=submitname=okvalue="OK">
</form>
</center>
</body>
</html>
注意enctype="multipart/form-data",一定要在Form中有這個(gè)屬性,否則,將無法得到上傳上來的數(shù)據(jù)。接下來,我們要在process.asp中對(duì)從瀏覽器中獲取的數(shù)據(jù)進(jìn)行必要的處理,因?yàn)槲覀冊(cè)趐rocess.asp中獲取到的數(shù)據(jù)不僅僅包含了我們想要的上傳上來的圖片的數(shù)據(jù),也包含了其他的無用的信息,我們需要剔除冗余數(shù)據(jù),并將處理過的圖片數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,這里我們以access2000為例。具體代碼如下(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)
setconnGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&server.Ma
pPath("images.mdb")&";uid=;PWD=;"
connGraph.Open
setrec=server.createobject("ADODB.recordset")
rec.Open"SELECT*FROM[images]whereidisnull",connGraph,1,3
rec.addnew
rec("img").appendchunkmydata
rec.update
rec.close
setrec=nothing
setconnGraph=nothing
%>
好了,這下我們就把上傳來的圖片保存到了名為images.mdb的數(shù)據(jù)庫(kù)中了,剩下的工作就是要將數(shù)據(jù)庫(kù)中的圖片數(shù)據(jù)顯示到網(wǎng)頁(yè)上面了。一般在HTML中,顯示圖片都是使用<IMG>標(biāo)簽,也就是<IMGSRC="圖片路徑">,但是我們的圖片是保存到了數(shù)據(jù)庫(kù)中,“圖片路徑”是什么呢?呵呵,其實(shí)這個(gè)SRC屬性除了指定路徑外,也可以這樣使用哦:
<IMGSRC="showimg.asp?id=xxx">
所以,我們所要做的就是在showimg.asp中從數(shù)據(jù)庫(kù)中讀出來符合條件的數(shù)據(jù),并返回到SRC屬性中就可以了,具體代碼如下(showimg.asp):
<%
setconnGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&
server.MapPath("images.mdb")&";uid=;PWD=;"
connGraph.Open
setrec=server.createobject("ADODB.recordset")
strsql="selectimgfromimageswhereid="&trim(request("id"))
rec.openstrsql,connGraph,1,1
Response.ContentType="image/*"
Response.BinaryWriterec("img").getChunk(7500000)
rec.close
setrec=nothing
setconnGraph=nothing
%>
注意在輸出到瀏覽器之前一定要指定Response.ContentType="image/*",
以便正常顯示圖片。
最后要注意的地方是,我的process.asp中作的處理沒有考慮到第一頁(yè)(upload.htm)中還有其他數(shù)據(jù),比如<INPUT type=tesxt name=userid>等等,如果有這些項(xiàng)目,你的process.asp就要注意處理掉不必要的數(shù)據(jù)。
- 第 1 樓 上海有線通 網(wǎng)友 客人 發(fā)表于: 2013/10/29 15:57:40
- 呵呵要是可以實(shí)例供下載學(xué)習(xí)就好了