• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Welcome to 陳俊峰's ---BeetleHeaded Man Blog !

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              58 隨筆 :: 32 文章 :: 18 評論 :: 0 Trackbacks

            用ASP編寫網站應用程序時間長了,難免會遇到各式各樣的問題,其中關于如何上傳文件到服
            務器恐怕是遇見最多的問題了,尤其是上傳圖片,比如你想要在自己的社區里面實現類似網易
            虛擬社區 提供的“每日一星”的功能,就要提供給網友上傳照片的功能。上傳圖片文件到服務
            器可以使用各種免費的文件上傳組件,使用起來功能雖然很強大,但是由于很多情況下,我們
            只能使用免費的支持ASP的空間或者租用別人的虛擬空間,對于第一種情況,我們根本就沒
            有可能來使用文件上傳組件;至于第二種情況,我們也要付出不少的“銀子”才可以。除非你
            擁有自己的虛擬主機,你就可以隨便的在服務器上面安裝自己所需要的組件,這種情況對于大
            多數人來說是可望而不可及的。那我們就沒有辦法了嗎?呵呵,答案是肯定的(當然是肯定的
            了,要不然我也沒法寫出這篇文章啊)。下面就讓我們一起來使用純ASP代碼來實現圖片的
            上傳以及保存到數據庫的功能(順便也實現顯示數據庫中的圖片到網頁上的功能)。


               首先我們先來熟悉一下將要使用的對象方法。我們用來獲取上一個頁面傳遞過來的數據一
            般是使用Request對象。同樣的,我們也可以使用Request對象來獲取上傳上來的文件數據,使
            用的方法是Request.BinaryRead()。而我們要從數據庫中讀出來圖片的數據顯示到網頁上面要
            用到的方法是:
            Request.BinaryWrite()。在我們得到了圖片的數據,要保存到數據庫中的時候,不可以直接
            使用Insert語句對數據庫進行操作,而是要使用ADO的AppendChunk方法,同樣的,讀出數據庫
            中的圖片數據,要使用GetChunk方法。各個方法的具體語法如下:
            *Request.BinaryRead語法:
            variant=Request.BinaryRead(count)
            參數
            variant
            返回值保存著從客戶端讀取到數據。
            count
            指明要從客戶端讀取的數據量大小,這個值小于或者等于使用方法Request.TotalBytes得到的
            數據量。
            *Request.BinaryWrite語法:
            Request.BinaryWritedata
            參數
            data
            要寫入到客戶端瀏覽器中的數據包。
            *Request.TotalBytes語法:
            variant=Request.TotalBytes
            參數
            variant
            返回從客戶端讀取到數據量的字節數。
            *AppendChunk語法
            將數據追加到大型文本、二進制數據Field或Parameter對象。
            object.AppendChunkData
            參數
            objectField或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將把調用解釋為新的GetChu
            nk操作并從記錄的起始處開始讀取。如果其他Recordset對象不是首個Recordset對象的副本,
            則訪問其中的字段不會破壞GetChunk操作。
            如果Field對象的Attributes屬性中的adFldLong位設置為True,則可以對該字段使用GetChun
            k方法。
            如果在Field對象上使用Getchunk方法時沒有當前記錄,將產生錯誤3021(無當前記錄)。
               接下來,我們就要來設計我們的數據庫了,作為測試我們的數據庫結構如下(Access200
            0):


            字段名稱    類型    描述
               id   自動編號   主鍵值
            img OLE對象   用來保存圖片數據 


            對于在MSSQLServer7中,對應的結構如下:
            字段名稱    類型    描述
               id    int(Identity)  主鍵值
            img   image    用來保存圖片數據
            現在開始正式編寫我們的純ASP代碼上傳部分了,首先,我們有一個提供給用戶的上傳界面
            ,可以讓用戶選擇要上傳的圖片。代碼如下
            (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中有這個屬性,否則,將無法得到上傳
            上來的數據。接下來,我們要在process.asp中對從瀏覽器中獲取的數據進行必要的處理,因
            為我們在process.asp中獲取到的數據不僅僅包含了我們想要的上傳上來的圖片的數據,也包
            含了其他的無用的信息,我們需要剔除冗余數據,并將處理過的圖片數據保存到數據庫中,這
            里我們以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的數據庫中了,剩下的工作就是要
            將數據庫中的圖片數據顯示到網頁上面了。一般在HTML中,顯示圖片都是使用<IMG>標簽
            ,也就是<IMGSRC="圖片路徑">,但是我們的圖片是保存到了數據庫中,“圖片路徑”是什么
            呢?呵呵,其實這個SRC屬性除了指定路徑外,也可以這樣使用哦:
            <IMGSRC="showimg.asp?id=xxx">
            所以,我們所要做的就是在showimg.asp中從數據庫中讀出來符合條件的
            數據,并返回到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中作的處理沒有考慮到第一頁(upload.htm)中還有其
            他數據,比如<INPUT type=tesxt name=userid>等等,如果有這些項目,你的process.asp就
            要注意處理掉不必要的數據。

            posted on 2006-05-10 10:54 Jeff-Chen 閱讀(462) 評論(1)  編輯 收藏 引用 所屬分類: ASP.NET

            評論

            # re: ASP實現圖片上傳 2006-11-06 11:39 kjl
            如何將字段中的照片數據還原成文件  回復  更多評論
              

            亚洲国产精品成人久久| 国产69精品久久久久9999APGF| 亚洲精品国产美女久久久| 精品久久久久久无码专区不卡| 天天爽天天爽天天片a久久网| 久久影院午夜理论片无码 | 久久影视综合亚洲| 亚洲午夜久久久久妓女影院| 久久九九青青国产精品| 久久久亚洲AV波多野结衣 | 激情五月综合综合久久69| 久久精品中文字幕大胸| 青草影院天堂男人久久| 久久久久se色偷偷亚洲精品av| 久久精品国产免费一区| 久久综合给合久久狠狠狠97色| 久久久久97国产精华液好用吗| 人妻精品久久无码专区精东影业| 久久精品亚洲精品国产欧美| 日韩AV无码久久一区二区| 亚洲另类欧美综合久久图片区| 久久国产精品99久久久久久老狼| 国内精品伊人久久久影院| 久久精品视屏| 国内精品久久久久久久亚洲| 国产综合久久久久| 久久99精品久久只有精品 | 少妇高潮惨叫久久久久久| 中文精品99久久国产| 日本高清无卡码一区二区久久 | 国产日韩久久久精品影院首页| 91精品国产9l久久久久| 精品久久一区二区| 色综合久久久久网| 99久久国产主播综合精品| 国产精品九九久久免费视频| 伊人久久大香线蕉精品| 久久99精品久久久久久9蜜桃| 国内精品久久久久国产盗摄| 精品久久久久中文字| 久久久久久一区国产精品|