① 關於ASP照片的上傳
實例分析
但是,利用ASP技術直接實現文件上傳功能則只需編程者掌握單一的ASP技術即可,
大大降低了編程難度。下面我們將通過一個實例來介紹如何使用該方法。
1、文件上傳表單
首先需要編寫一個能提供文件上傳功能的表單,程序如下所示:
<Form action="upload.asp" method=post enctype="multipart/form-data">
上傳文件:<Input type=file name=file1><br>
<input type=submit name=upload value="上傳">
</form>
其中,enctype參數用來設置表單的MIME編碼方式,在進行文件(或同時包含文本框)上傳時,必須將其屬性設置為"multipart/form-data";upload.asp是伺服器端對接收到的二進制文件流進行處理的ASP程序,在本文的後面將陸續介紹其內容。
2、上傳文件格式分析
在處理文件之前,我們要先了解上傳的文件的具體格式,通過編寫下面一段簡單的ASP程序就可以查看其二進制代碼:
<%
filesize=Request.TotalBytes '獲得上傳文件的大小
filedata=Request.BinaryRead(filesize) '獲得上傳文件的二進制數據
Response.BinaryWrite filedata '在瀏覽器上顯示二進制數據
%>
分析瀏覽器上顯示的上傳文件的二進制代碼,發現代碼包括四個部分(若同時上傳多個文件或文本框,則代碼按上傳的先後次序排列,格式相同),每一部分的內容是用回車換行符號來進行分隔的:
1)第一部分(起始標志)
-----------------------------7d329631b04d4
2)第二部分(文件說明)
Content-Disposition: form-data; name="file1"; filename="C:\Documents and Settings\Administrator\My Documents\Invitation.doc" Content-Type: application/msword
在此,我們可以獲得上傳文件的文件名稱及絕對路徑,也可以獲得文件類型。這些信息是正確保存文件所不可缺少的。
3)第三部分(文件內容)
即文件的二進制內容,略。
4)第四部分(結束標志)
-----------------------------7d329631b04d4
結合第一部分和第四部分的內容來看,"-----------------------------7d329631b04d4"(每次上傳,數值都不一樣)起到了分割符的作用,它標志著一段數據(當有多個上傳內容時)的開始和結束。從保存文件所需要的信息來講,我們首先需要從第二部分數據的"filename"中獲得文件名稱,然後需要正確定位文件的起始位置,最後利用ASP技術將二進制文件用本來的文件名保存即可。若同時上傳多個內容(如多個文本框和文件),也是按同樣的方法處理,每部分的內容都包含在分割符之中,只是文本框和文件的表現形式稍有不同,這可以通過具體分析其二進制代碼來了解。
3、利用ASP技術實現文件存儲
上傳文件代碼的處理
1) 獲得分割符代碼
從上面的分析我們已經知道,分割符起到了分割多個數據段(包括文本框和各種類型的文件)的重要作用。前面已經分析過,分割符出現在第一個回車換行符號前。因此,通過下面這段程序就可獲得分割符代碼:
<%
newline=chrB(13) & chrB(10) 'newline表示二進制的回車符
filesize=Request.TotalBytes 'filesize是上傳文件的大小
filedata=Request.BinaryRead(filesize) 'filedata是上傳文件的二進制數據
divider=leftB(filedata,clng(instrb(filedata,newline))-1) 'divider是分割符
%>
註:因為這里處理的都是二進制位元組碼,因此,所有的函數都是使用它的二進制版本,加了"b "。
2) 獲得文件(或文本框)內容
(1) 預備函數(將二進制串轉化成字元串)
上傳文件的內容不需要經過二進制向字元串的轉換過程,直接保存就可。但是,若需提取文本框內容或文件的名稱,就必須進行轉換。因此,需要編寫一個通用的,並且適用於漢字的轉換函數。以下是該函數代碼:
Function BtoS (bstr)
If not Is Null (bstr) Then
for i = 0 to lenb(bstr) - 1
bchr = midb(bstr,i+1,1)
If ascb(bchr)>127 Then '漢字是雙位元組,得兩個字元一起處理
temp = temp&chr(ascw(midb(bstr, i+2, 1)&bchr))
i = i+1
Else
temp = temp&chr(ascb(bchr))
End If
next
End If
BtoS = temp
End Function
(2) 獲得文件(或文本框)內容
在實際的WEB應用中,上傳操作可能涉及多項內容,如多個文本框、多個文件等等。文件和文本框很好區分,文件的數據中包含了"filename="字串。因此,我們寫了如下的通用函數,既可用於提取文件內容,又可提取文本框內容(需進行二進制轉換):
Function getdata(byval data, byval divider, final) 'data表示二進制串;divider表示分割符;final表示數據的結束位置
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) '字元串"filename"的二進製表示
bncrlf=chrb(13)&chrb(10) '二進制的回車符
startpos = instrb(data,divider)+lenb(divider)+lenb(bncrlf) ' 開始位置
endpos = instrb(startpos,data, divider)-lenb(bncrlf) '結束位置
part1 = midb(data, startpos, endpos-startpos) '兩個分割符之間的內容
firstline = midb(part1, 1, instrb(part1, bncrlf)-1) ' 內容之前的說明段
If (instrb(firstline,filename)=0) Then '若為文本框,獲得文本框字元串內容
stemp=midb(part1,instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(part1)-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata=BtoS(stemp)
Else '若為文件,獲得文件二進制內容
Getdata=midb (part1, instrb (part1, bncrlf&bncrlf)+lenb (bncrlf&bncrlf), lenb (part1)
-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
End If
Final=endpos
End function
在程序中直接調用該函數就可獲得所需文件(或文本框)內容,如下所示:
<%
Content=getdata (data, divider, position)
%>
3) 獲得文件名稱
前面已經分析過了,上傳文件數據流的"filename="欄位里包含了文件的名稱和絕對路 徑。一般來說,我們只需提取出路徑中的文件名即可,以下是程序代碼:
<%
namepos=instrrev(B2S(firstline),chr(92)) 'firstline即上面獲得的說明部分數據,chr(92)
表示"/"
filename=midb(firstline,namepos+1,lenb(firstline)-namepos-1) '獲得文件名稱
%>
利用ASP直接實現文件上傳功能
傳統的ASP程序員只能利用FILESYSTEMOBJECT對象對文本文件(.txt)進行移動、復制、刪除等操作,若需處理二進制對象,則不得不採用本文前面介紹的那些方法來實現。但是,現在ASP中的ADO.STREAM對象可以同時操作文本對象和二進制對象(可以在http://www.microsoft.com/data下載),利用它就可以在ASP中直接實現文件上傳功能。下面,我們就介紹其實現過程。
1)打開STREAM對象
對於SREAM對象而言,若要進行文件的保存,則必須是將該對象的全部內容進行保存。因此,我們必須要創建兩個(或多個)STREAM對象,其中一個為源數據流,即接收初始的二進制數據;另一個為目的數據流,即接收來自經源數據流處理後的數據,並最終保存為所需的文件。
<%
set str=server.CreateObject("ADODB.Stream") 'str為源數據流
str.Mode=3 '設置打開模式,3為可讀可寫
str.Type=1 '設置數據類型,1為二進制數據
str.Open
set desc=server.CreateObject("ADODB.Stream") 'desc為目標數據流
desc.Mode=3
Desc.Type=1
desc.Open
%>
2)STEAM對象間內容的復制
在該部分,必須在源數據流中定位文件開始的位置,並且求出文件內容的長度,才能將文件正確的復制到目的數據流中,並且保存文件,程序代碼如下:
<%
formdata=Request.BinaryRead(Request.TotalBytes) 'formdata為上傳的所有內容
str.Write formdata ' 賦值源數據流
str.position=count-lenb(result)-2 'position指出文件的開始位置
str.to desc, lenb(filecotent) 'lenb(filecontent)表示文件的長度
desc.SaveToFile fullpath,2 '以fullpath指定的路徑及名稱保存文件
%>
3)關閉STEAM對象
編程完成後,應關閉並釋放STEAM對象,如下所示:
<%
Desc. Close
Set desc=nothing
Str. Close
Set STR=nothing
%>
總結
本文給出了利用ASP直接實現文件上傳的方法,在本單位自行開發的信息管理系統中得到了很好的應用。實踐證明:與傳統的幾種文件上傳方法相比,該方法更簡便、更高效。
② java編程:怎麼用JSP(javabean)上傳一張圖片到伺服器的指定文件夾呢
網路,想飛社區,在資訊里,找 WEB前端 分類,有一篇文章:AJAX JAVA 上傳文件,可以參考,抱歉,貼不了地址。。。我只能這樣說了
③ 安卓編程,設計一個按鈕,點擊後進入圖庫選擇視頻或照片文件,選擇後返回選擇文件的路徑放到一個stri
首先將自己的圖片上傳到網上相冊
在將該圖片地址,粘貼到貼吧圖片欄
具體步驟參見:
空間相冊中的圖片.
要在空間相冊添加圖片,請依次操作:首先登陸網路空間--我的相冊--添加圖片,打開一個網頁,按照提示操作即可,非常簡單,一次最多可上傳6張照片網路空間上傳圖片:
一般用戶可擁有1G的上傳空間。
上傳照片:點擊「相冊列表」右側「上傳新照片」。
一次最多可上傳6張照片,每張照片大小為小於3M;
照片格式為:JPG、GIF、PNG、BMP。
可以選擇將照片放入某個相冊。
也可以臨時創建新的相冊。
創建新相冊:點擊「相冊列表」右側「創建新相冊」。
填寫「相冊名稱」、「簡介」選擇「瀏覽許可權」後新相冊創建成功。
=====================================================================
沒有網路空間請先創建,創建網路空間很簡單,具體步驟和注意事項:
若您沒有網路帳號,請在「網路空間」主頁()點擊「立即注冊並創建我的空間」(頁面右上部分)按照說明進行注冊。 若您有網路帳號,請在登錄框中輸入您的用戶名及密碼,進行空間激活。
登錄注冊後為您的空間指定唯一的網址:
該網址為指定的唯一網址;
只允許漢字、字母、數字和下劃線;
一旦申請成功即不可更改。
填寫空間名稱(最多為40個漢字),您可以在以後更改此標題。(詳情參見設置—基本選項)
完成「激活您的空間」頁面內容的填寫,點擊「創建空間」按鈕,完成創建。
-------------------------------------------
多個免費上傳圖片空間上傳圖片網
圖片上傳後,如何發到貼吧:
如何貼圖
簡述:
在網路貼吧貼圖非常簡單,不過在貼圖之前,首先需要在網上任意找到一張圖片
第一步:
將滑鼠移動到圖片上,點擊滑鼠右鍵,選擇「屬性」。
--------------------------------------------------------------------------------
第二步:
這時會出現一個對話框,在對話框「地址(URL)」一項旁邊,有一段很長的地址。將這段地址「復制」下來。
--------------------------------------------------------------------------------
第三步:
然後將剛剛「復制」的這段(URL)地址「粘貼」在網路貼吧發言區的「圖片鏈接」一項當中,再填好貼子標題和內容,最後點擊「發表貼子」。貼圖成功!
返回頁首
貼圖注意事項
因為網路貼吧不支持直接在發貼時上傳圖片,所以在貼吧發貼時所貼出的圖片必須是網路上已存在的圖片,而不是電腦硬碟中存儲的圖片。
如果您希望將自己電腦中存有的圖片拿到貼吧當中與大家分享,那麼首先要將您電腦中的圖片上傳到該吧圖片庫(什麼是圖片庫?)或者其它網站上,獲取一個圖片URL地址後就可以粘貼到網路貼吧上來。
對於已經開通圖片庫功能的貼吧,該吧吧主和圖片小編(如何成為圖片小編?)可以上傳圖片到該吧圖片庫。
貼吧目前只支持粘貼jpg、jpeg、gif、bmp這四種常見格式的圖片。如果您粘貼的圖片格式是這四種常見格式之外的,那麼圖片貼出後將無法顯示。
* 如果還有問題,請到貼吧幫助吧去問問吧。