- Sep 17 Fri 2010 16:57
-
轉:ASP中調用出現“ADODB.Recordset (0x800A0BB9)”
- Aug 11 Mon 2008 13:07
-
轉:ASP刪除多筆資料並同時刪除多筆檔案製作教學
來源:http://www.dreamweaver.com.tw/forumDetail.asp?main_id=8531
最近常常收到詢問要如何製作刪除資料又同時刪除檔案的方式,之前PO過的方式絕對可行,不能執行的原因有很多,請查閱相關書籍;但希望在此學習的朋友們,能多多分享自己的製作心得。
從去年就有PO一篇刪除檔案的教學,有褒有貶,好不好用在於個人,但請製作成功的朋友,能多加動點腦筋去利用它製作更多不同的方式,不要太過依賴別人給你的東西,不然這樣是學不到什麼的;常常收到的那些信件中,也有詢問如何刪除多筆資料與檔案,因為本人工作還有課業繁忙,一直沒有時間去做這些東西,因為詢問的人實在太多了,小弟利用空餘的時間製作一個範例分享給大家。
再這裏教導各位如何利用checkbox的方式,選擇要刪除的資料與同時刪除其相關的檔案,可多選刪除,請按照步驟做即可!如下:
- Aug 08 Fri 2008 15:17
-
轉:ASP Stream 速查
- Aug 07 Thu 2008 16:31
-
轉:如何利用ASP把圖片上傳到資料庫
發布於2005-11-10 17:50 來源:網海拾貝 --------------------------------------------------------------------------------
ASP(Active Server Pages)是Microsoft很早就推出的一種WEB應用程序解決方案,也是絕大多數從事網站開發人員很熟悉的一個比較簡單的程式化環境。通過ASP我們可以創建功能強大的動態的WEB應用程序。ASP雖然功能很強大,但有些功能用純ASP代碼完成不了,為了能保證開發出功能更加強大的WEB應用程序,我們可以借助調用COM組件。 在日常工作中,例如開發一個“商品網上銷售系統”吧,為了使顧客對商品的外觀有所了解,也就是顧客在看商品的文字介紹的同時在文字的旁邊有該商品的圖片加以說明,這樣顧客就可以對該商品有個系統的了解,對推銷商品有很大的幫助。所以我們在開發系統時當然就要加入圖片處理模塊,即如何把圖片上傳到服務器(圖片可以放在WEB服務器上某一個文件夾里也可以放在SQL Server服務器里)和如何讓上傳的圖片在瀏覽器端顯示出來,這都是開發人員要考慮到的問題。
- Aug 07 Thu 2008 16:25
-
轉:修補upfile.asp上傳漏洞
1. 得到文件擴展名
2. ASP上傳文件漏洞檢測
3. 格式化顯示文件大小
4. asp檢測上傳圖片是否為真實圖片
5. 上傳文件擴展名檢測
6. 取得文件對應的圖標
7. 下載文件等相關函數
- Aug 07 Thu 2008 15:03
-
轉:ASP字符串函數大全
補充:Asc Asc函數提取字符串第一個字母的ANSI字符碼。
用法為:result = Asc(string)
其中result是字符碼,string是任意有效的字符串表達式。如果string為Empty,則產生一個實時錯誤。
AscB AscB函數提取字符串的第一個位元組。
用法為:result = AscB(string)
其中result是Byte字類,string是任意有效的字符串表達式。如果string為Empty,則產生一個實時錯誤。
AscW AscW函數提取字符串第一個字母的Unicode字符碼。
用法為:result = AscW(string)
其中result是Unicode,string是任意有效的字符串表達式。如果string為Empty,則產生一個實時錯誤。
InStr InStr函數識別某個記號在字符串中的首字母位置。
用法為:newstart = InStr([start, ]source, token[, compare])
其中newstart時記號在字符串中的位置(如果沒有的話則為0),start是搜尋的起始位置,source是要搜尋的字符串,token是要定位的字符串,compare是比較類型(0表示二進制比較,1表示忽略大小寫的文本比較)。
InStrB InStrB函數是InStr的位元組版,識別某個記號在字符串中的首位元組位置。
用法為:newstart = InStrB([start, ]source, token[, compare])
其中newstart時記號在字符串中的首位元組位置(如果沒有的話則為0),start是搜尋的起始位置,source是要搜尋的字符串,token是要定位的字符串,compare是比較類型(0表示二進制比較,1表示忽略大小寫的文本比較)。
LCase LCase函數把字符串變為小寫形式。
用法為:result = LCase(string)
其中result是小寫字符串,string是任意有效的字符串表達式。
Left Left函數從字符串的起始處提取指定數目的字符。
用法為:result = Left(string,length)
其中result是字符串變量,string是有效的字符串表達式,length是表示返回多少字符的數值型表達式。
LeftB LeftB函數從字符串的起始處提取指定數目的位元組。
用法為:result = LeftB(string,length)
其中result是字符串變量,string是有效的字符串表達式,length是表示提取的位元組數的數值型表達式。
Len Len函數確定字符串的大小或存儲這個變量需要多少字符。
用法為:result = Len(string | varname)
其中,result是字符串中的字符數或存儲這個變量所需的位元組數,string是任意有效的字符串表達式,varname是變量名。
LenB Len函數確定字符串的大小或存儲這個變量需要多少位元組。
用法為:result = LenB(string | varname)
其中,result是字符串中的位元組數或存儲這個變量所需的位元組數,string是任意有效的字符串表達式,varname是變量名。
LTrim LTrim函數復制字符串並去掉前面的空格。
用法為:result = LTrim(string)
其中,result是去掉空格后的字符串,string是要去掉空格的有效字符串表達式。
Mid Mid函數從字符串的某個位置復制指定數目的字符。
用法為:result = Mid(string,start[,length])
其中,result是結果字符串,string是要從中復制字符的表達式,start是string中復制的起始位置,length是要復制的字符數。
MidB Mid函數從字符串的某個位置復制指定數目的位元組。
用法為:result = Mid(string,start[,length])
其中,result是結果字符串,string是要從中復制位元組的表達式,start是string中復制的起始位置,length是要復制的位元組數。
Right Right函數從字符串的尾部提取指定數目的字符。
用法為:result = Right(string,length)
其中result是字符串變量,string是有效的字符串表達式,length是表示返回多少字符的數值型表達式。
RightB RightB函數從字符串的起始處提取指定數目的位元組。
用法為:result = RightB(string,length)
其中result是字符串變量,string是有效的字符串表達式,length是表示提取的位元組數的數值型表達式。
RTrim RTrim函數復制字符串並去掉尾部的空格。
用法為:result = RTrim(string)
其中,result是去掉空格后的字符串,string是要去掉空格的有效字符串表達式。
String String函數構造含有多個相同字符的字符串。
用法為:result = String(number, character)
其中,result是字符串變量,number是返回字符串的長度,character是用來構造返回字符串的字符碼。
Trim Trim函數復制字符串並去掉首尾的空格。
用法為:result = Trim(string)
其中,result是去掉空格后的字符串,string是要去掉空格的有效字符串表達式。
UCase UCase函數把字符串變為大寫形式。
用法為:result = UCase(string)
其中result是大寫字符串,string是任意有效的字符串表達式。
字符串函數 [討論] 函數說明CBool資料轉Boolean類型Cdate資料轉Time類型CDbl資料轉Double類型Cint資料轉Integer類型CLng資料轉Lang類型Asc字符轉數字類型CStr數字轉String類型Chr數字轉字符類型Variant變量一般會將其代表的資料子類型自動轉換成合適的資料類型,但有時候,自動轉換也會造成一些資料類型不匹配的錯誤.這時,可使用轉換函數來強制轉換資料的子類型. 函數 功能 Asc 函數 返回與字符串的第一個字母對應的 ANSI 字符代碼。 Chr 函數 返回與指定的 ANSI 字符代碼相對應的字符 Hex 函數 返回表示十六進制數字值的字符串。 Oct 函數 返回表示數字八進制值的字符串。 CStr 函數 返回表達式,該表達式已被轉換為 字符串 子類型。 CDate 函數 返回表達式,此表達式已被轉換為 日期 子類型。 CInt 函數 返回表達式,此表達式已被轉換為 整數 子類型。 CLng 函數 返回表達式,此表達式已被轉換為 長整數 子類型 CSng 函數 返回表達式,該表達式已被轉換為 Single 子類型 CDbl 函數 返回表達式,此表達式已被轉換為 Double 子類型 CBool 函數 返回表達式,此表達式已轉換為 布爾 子類型 1、Asc 函數示例 下面例子中, Asc 返回每一個字符串首字母的 ANSI 字符代碼: Dim MyNumber MyNumber = Asc("A") '返回 65。 MyNumber = Asc("a") '返回 97。 MyNumber = Asc("Apple") '返回 65。 2、Chr 函數示例 下面例子利用 Chr 函數返回與指定的字符代碼相對應的字符: Dim MyChar MyChar = Chr(65) '返回 A。 MyChar = Chr(97) '返回 a。 MyChar = Chr(62) '返回 >。 MyChar = Chr(37) '返回 %。 3、Hex 函數示例 下面的示例利用 Hex 函數返回數字的十六進制數: Dim MyHex MyHex = Hex(5) ' 返回 5。 MyHex = Hex(10) ' 返回A。 MyHex = Hex(459) ' 返回 1CB。 4、Oct 函數示例 下面的示例利用 Oct 函數返回數值的八進制數: Dim MyOct MyOct = Oct(4) ' 返回 4。 MyOct = Oct(8) ' 返回 10。 MyOct = Oct(459) ' 返回 713。 5、 CStr 函數示例 <%num1=666StrWelcome="歡迎第"&CStr(num1)&"個來訪者"%> CStr將變量num1由整數子類型強制轉換為字符串子類型 6、CDate 函數示例 MyDate = "October 19, 1962" ' 定義日期。 MyShortDate = CDate(MyDate) ' 轉換為日期資料類型。 MyTime = "4:35:47 PM" ' 定義時間。 MyShortTime = CDate(MyTime) ' 轉換為日期資料類型。 7、CInt 函數示例 Dim MyDouble, MyInt MyDouble = 2345.5678 ' MyDouble 是 Double。 MyInt = CInt(MyDouble) ' MyInt 包含 2346。 8、CLng 函數示例 Dim MyVal1, MyVal2, MyLong1, MyLong2 MyVal1 = 25427.45: MyVal2 = 25427.55 ' MyVal1, MyVal2 是雙精度值。 MyLong1 = CLng(MyVal1) ' MyLong1 25427。 MyLong2 = CLng(MyVal2) ' MyLong2 包含 25428 。 9、CBool 函數示例 Dim A, B, Check A = 5: B = 5 ' 初始化變量。 Check = CBool(A = B) '復選框設為 True 。 A = 0 '定義變量。 Check = CBool(A) '復選框設為 False
10、asp vb中Len和LenB函數用法!
VB 中字串是 UniCode 格式,我們就知道 Len("ABC測試") 等於 5 , LenB("ABC測試") 等於10,當然,因為 Win9x 系統內部並不使用 UniCode ,所以在和 API 接口時就會出現問題了。我們經常可以見到 API 的聲明函數最后由一個“A”,比如“SetWindowTextA”“GetPrivateProfileStringA”等等,這是表明此函數使用 ANSI 字符串格式;相對的,也有使用 UniCode格式字串的相同功能的函數,后綴為“U”,比如“SetWindowTextU”“GetPrivateProfileStringU”等等,不過這些 UniCode 格式的函數一般僅用於 Windows NT ,Windows 9x 上很少有,另外,因為 Windows NT 也支持 ANSI 格式的函數,所以平時我們調用的仍然是 ANSI格式的函數,也所以 VB 在調用 API 時,都會把字串轉換成字符串,以便和 ANSI 函數相兼容。
Len和LenB函數
Visual Basic有兩個返回字符串長度的函數:Len和LenB。它們都可以接收一個BSTR或是一個ANSI BSTR,並且返回一個長整型數值。以下的代碼說明了一切:
s = "help"
Debug.Print Len(s), LenB(s)
Debug.Print Len(StrConv(s, vbFromUnicode)), LenB(StrConv(s, vbFromUnicode))
輸出結果是:
4 8
2 4
這表明,Len返回的是字符數,而LenB返回的是在BSTR中的位元組數。
- Aug 07 Thu 2008 09:23
-
轉:簡單的ASP無組件上傳原理實踐總結!
- Aug 06 Wed 2008 15:55
-
轉:用純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將把調用解釋為新的GetChunk操作並從記錄的起始處開始讀取。如果其他Recordset對象不是首個Recordset對象的副本,則訪問其中的字段不會破坏GetChunk操作。
如果Field對象的Attributes屬性中的adFldLong位設置為True,則可以對該字段使用GetChunk方法。
如果在Field對象上使用Getchunk方法時沒有當前記錄,將產生錯誤3021(無當前記錄)。
接下來,我們就要來設計我們的資料庫了,作為測試我們的資料庫結構如下(access2000):
字段名稱 類型 描述
id 自動編號 主鍵值
img OLE對象 用來保存圖片資料
對於在MSSQLServer7中,對應的結構如下:
字段名稱 類型 描述
id int(Identity) 主鍵值
img image 用來保存圖片資料
現在開始正式編寫我們的純ASP代碼上傳部分了,首先,我們有一個提供給使用者的上傳界面,可以讓使用者選擇要上傳的圖片。代碼如下
(upload.htm):
注意enctype="multipart/form-data",一定要在Form中有這個屬性,否則,將無法得到上傳上來的資料。接下來,我們要在process.asp中對從瀏覽器中獲取的資料進行必要的處理,因為我們在process.asp中獲取到的資料不僅僅包含了我們想要的上傳上來的圖片的資料,也包含了其他的無用的資訊,我們需要剔除冗余資料,並將處理過的圖片資料保存到資料庫中,這里我們以access2000為例。具體代碼如下(process.asp):好了,這下我們就把上傳來的圖片保存到了名為images.mdb的資料庫中了,剩下的工作就是要將資料庫中的圖片資料顯示到網頁上面了。一般在HTML中,顯示圖片都是使用標簽,也就是,但是我們的圖片是保存到了資料庫中,“圖片路徑”是什麼呢?呵呵,其實這個SRC屬性除了指定路徑外,也可以這樣使用哦:所以,我們所要做的就是在showimg.asp中從資料庫中讀出來符合條件的
資料,並返回到SRC屬性中就可以了,具體代碼如下(showimg.asp):注意在輸出到瀏覽器之前一定要指定Response.ContentType="image/*",
以便正常顯示圖片。
最后要注意的地方是,我的process.asp中作的處理沒有考慮到第一頁(upload.htm)中還有其他資料,比如等等,如果有這些項目,你的process.asp就要注意處理掉不必要的資料。
- Aug 06 Wed 2008 15:16
-
轉:ASP無組件上傳類代碼詳細說明
來源:http://hi.baidu.com/tianguipeng/blog/item/9a6832c6b936e4189c163d07.html
2007年09月22日 星期六 14:55
本文講述ASP無組件上傳類代碼詳細說明,此上傳類是在化境程式化界發布的無組件上傳類的基礎上修改的,在與化境程式化界無組件上傳類相比,速度快了將近50倍。
<iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-3795982983039684&dt=1190444013453&lmt=1190444013&format=300x250_as&output=html&correlator=1190444013390&channel=0503227947&url=http%3A%2F%2Fwww.mobanku.com%2Ffile%2Fasp%2F00533.asp&color_bg=FFFFFF&color_text=000000&color_link=0000FF&color_url=008000&color_border=FFFFFF&ad_type=text&ref=http%3A%2F%2Fcache.baidu.com%2Fc%3Fword%3Dasp%253B%25C0%25E0%253B%25B5%25C4%253B%25CF%25EA%25CF%25B8%253B%25CB%25B5%25C3%25F7%26url%3Dhttp%253A%2F%2Fwww%252Emobanku%252Ecom%2Ffile%2Fasp%2F00533%252Easp%26p%3D9e6fc64ad6c911a05ee7d73756649d%26user%3Dbaidu&cc=169&ga_vid=679029804.1190444013&ga_sid=1190444013&ga_hid=1596244964&flash=9&u_h=768&u_w=1280&u_ah=738&u_aw=1280&u_cd=32&u_tz=480&u_his=1&u_java=true" frameborder="0" width="300" scrolling="no" height="250" allowtransparency="allowtransparency">
- Aug 06 Wed 2008 14:59
-
轉:ASP實現圖文混合上傳,無須資料庫(一)
來源:網路流傳
真正無組件圖文混合上傳,無須資料庫,支援中文!該程式支援任何文本和二進製格式文件的上傳;支援文件表單域和普通表單域混合上傳;支援中文文件名;支援覆蓋上傳和文件同名時自動修改文件名;支援同時上傳多個文件,而且多個文件表單域名可以相同;支援上傳文件大小的控製 我自己感覺很不錯喲:)
本程式無須任何資料庫支援,直接將上傳的文件保存到服務器指定的路徑下。
測試環境:Windows2000 + IIS 5.0(對ADO版本有要求)
已知BUG:利用相同文件表單名以唯一文件名方式同時上傳多個文件,且服務器上存在多個相同文件名時,隻有第一個文件會自動改名上傳成功,然後程式報錯。
源代碼如下,歡迎大家參考指正:文件名:UploadX.asp
<%
Dim FormData, FormSize, Divider, bCrLf
FormSize = Request.TotalBytes
FormData = Request.BinaryRead(FormSize)
bCrLf = ChrB(13) & ChrB(10)
Divider = LeftB(FormData, InStrB(FormData, bCrLf) - 1)'將上傳的文件保存到path所指定的目錄下面。
'Formfield 上傳表單的"file"域名
'Path 要保存文件的服務器絕對路徑,形式為:"d:\path\subpath"或"d:\path\subpath\"
'MaxSize 限制上傳文件的最大長度,以KByte為單位
'SavType 服務器保存文件的方式:
' 0 唯一文件名方式,如果有同名則自動改名;
' 1 報錯方式,如果有同名則出錯;
' 2 覆蓋方式,如果有同名則覆蓋原來的文件\r
Function SaveFile(FormFileField, Path, MaxSize, SavType)
Dim StreamObj,StreamObj1
Set StreamObj = Server.CreateObject("ADODB.Stream")
Set StreamObj1 = Server.CreateObject("ADODB.Stream")
StreamObj.Mode = 3
StreamObj1.Mode = 3
StreamObj.Type = 1
StreamObj1.Type = 1
SaveFile = ""
StartPos = LenB(Divider) + 2
FormFileField = Chr(34) & FormFileField & Chr(34)
If Right(Path,1) <> "\" Then
Path = Path & "\"
End If
Do While StartPos > 0
strlen = InStrB(StartPos, FormData, bCrLf) - StartPos
SearchStr = MidB(FormData, StartPos, strlen)
If InStr(bin2str(SearchStr), FormFileField) > 0 Then
FileName = bin2str(GetFileName(SearchStr,path,SavType))
If FileName <> "" Then
FileStart = InStrB(StartPos, FormData, bCrLf & bCrLf) + 4
FileLen = InStrB(StartPos, FormData, Divider) - 2 - FileStart
If FileLen <= MaxSize*1024 Then
FileContent = MidB(FormData, FileStart, FileLen)
StreamObj.Open
StreamObj1.Open
StreamObj.Write FormData
StreamObj.Position=FileStart-1
StreamObj.CopyTo StreamObj1,FileLen
If SavType =0 Then
SavType = 1
End If
StreamObj1.SaveToFile Path & FileName, SavType
StreamObj.Close
StreamObj1.Close
If SaveFile <> "" Then
SaveFile = SaveFile & "," & FileName
Else
SaveFile = FileName
End If
Else
If SaveFile <> "" Then
SaveFile = SaveFile & ",*TooBig*"
Else
SaveFile = "*TooBig*"
End If
End If
End If
End If
If InStrB(StartPos, FormData, Divider) < 1 Then
Exit Do
End If
StartPos = InStrB(StartPos, FormData, Divider) + LenB(Divider) + 2
Loop
End FunctionFunction GetFormVal(FormName)
GetFormVal = ""
StartPos = LenB(Divider) + 2
FormName = Chr(34) & FormName & Chr(34)
Do While StartPos > 0
strlen = InStrB(StartPos, FormData, bCrLf) - StartPos
SearchStr = MidB(FormData, StartPos, strlen)
If InStr(bin2str(SearchStr), FormName) > 0 Then
ValStart = InStrB(StartPos, FormData, bCrLf & bCrLf) + 4
ValLen = InStrB(StartPos, FormData, Divider) - 2 - ValStart
ValContent = MidB(FormData, ValStart, ValLen)
If GetFormVal <> "" Then
GetFormVal = GetFormVal & "," & bin2str(ValContent)
Else
GetFormVal = bin2str(ValContent)
End If
End If
If InStrB(StartPos, FormData, Divider) < 1 Then
Exit Do
End If
StartPos = InStrB(StartPos, FormData, Divider) + LenB(Divider) + 2
Loop
End FunctionFunction bin2str(binstr)
Dim varlen, clow, ccc, skipflag
skipflag = 0
ccc = ""
varlen = LenB(binstr)
For i = 1 To varlen
If skipflag = 0 Then
clow = MidB(binstr, i, 1)
If AscB(clow) > 127 Then
ccc = ccc & Chr(AscW(MidB(binstr, i + 1, 1) & clow))
skipflag = 1
Else
ccc = ccc & Chr(AscB(clow))
End If
Else
skipflag = 0
End If
Next
bin2str = ccc
End FunctionFunction str2bin(str)
For i = 1 To Len(str)
str2bin = str2bin & ChrB(Asc(Mid(str, i, 1)))
Next
End FunctionFunction GetFileName(str,path,savtype)
Set fs = Server.CreateObject("Scripting.FileSystemObject")
str = RightB(str,LenB(str)-InstrB(str,str2bin("filename="))-9)
GetFileName = ""
FileName = ""
For i = LenB(str) To 1 Step -1
If MidB(str, i, 1) = ChrB(Asc("\")) Then
FileName = MidB(str, i + 1, LenB(str) - i - 1)
Exit For
End If
Next
If savtype = 0 and fs.FileExists(path & bin2str(FileName)) = True Then
hFileName = FileName
rFileName = ""
For i = LenB(FileName) To 1 Step -1
If MidB(FileName, i, 1) = ChrB(Asc(".")) Then
hFileName = LeftB(FileName, i-1)
rFileName = RightB(FileName, LenB(FileName)-i+1)
Exit For
End If
Next
For i = 0 to 9999
'hFileName = hFileName & str2bin(i)
If fs.FileExists(path & bin2str(hFileName) & i & bin2str(rFileName)) = False Then
FileName = hFileName & str2bin(i) & rFileName
Exit For
End If
Next
End If
Set fs = Nothing
GetFileName = FileName
End Function
%>文件名:upload.htm<html><head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>New Page 1</title>
</head><body><form method="POST" action="upload.asp" enctype="multipart/form-data">
<p>姓名:<input type="text" name="name" size="20"></p>
<p>城市:<input type="text" name="city" size="20"></p>
<p>愛好:1、<input type="text" name="lover" size="10"> 2、<input type="text" name="lover" size="10"></p>
<p>性別:<input type="radio" value="男" checked name="sex">男
<input type="radio" name="sex" value="女">女</p>
<p>省份:<select size="1" name="province">
<option selected value="屏東">屏東</option>
<option value="高雄">高雄</option></select></p>
愛好(補充):3、<input type="text" name="lover" size="10"> 4、<input type="text" name="lover" size="10">
<p>作品1:<input type="file" name="fruit" size="20"></p>
<p>作品1:<input type="file" name="fruit" size="20"></p>
<p>作品2:<input type="file" name="fruit2" size="20"></p>
<p><input type="submit" value="提交" name="subbutt"><input type="reset" value="全部重寫" name="rebutt"></p>
</form></body></html>
文件名:upload.asp
<%@ LANGUAGE = VBScript %>
<!-- #include file="uploadx.asp" -->
<%
Response.Write "<br>Name=""" & GetFormVal("name") & """"
Response.Write "<br>Sex=""" & GetFormVal("sex") & """"
Response.Write "<br>province=""" & GetFormVal("province") & """"
Response.Write "<br>city=""" & GetFormVal("city") & """"
Response.Write "<br>lover=""" & GetFormVal("lover") & """"
dim filename
path = Server.MapPath("./")
filename = SaveFile("fruit",path,1024,0)
If filename <> "*TooBig*" Then
Response.Write "<br><br>""" & filename & """已經上傳"
Else
Response.Write "<br><br>文件超出限制太大"
End IF
filename = SaveFile("fruit2",path,1024,0)
If filename <> "*TooBig*" Then
Response.Write "<br><br>""" & filename & """已經上傳"
Else
Response.Write "<br><br>文件超出限制太大"
End IF
%>
- Aug 06 Wed 2008 14:56
-
轉:ASP~無組件上傳的實現
來源:網路流傳
用vbscript來獲取數據,再用ADODB.Stream
<%
Dim FormData, FormSize, Divider, bCrLf
FormSize = Request.TotalBytes
FormData = Request.BinaryRead(FormSize)
bCrLf = ChrB(13) & ChrB(10)
Divider = LeftB(FormData, InStrB(FormData, bCrLf) - 1)
'將上傳的文件保存到path所指定的目錄下面。
'Formfield 上傳表單的"file"域名
'Path 要保存文件的服務器絕對路徑,形式為:"d:\txt"或"d:\path\subpath\"
'MaxSize 限制上傳文件的最大高度,以KByte為單位
'SavType 服務器保存文件的方式:
' 0 唯一文件名方式,如果有同名則自動改名;
' 1 報錯方式,如果有同名則出錯;
' 2 覆蓋方式,如果有同名則覆蓋原來的文件
rename="yes"
Function SaveFile(FormFileField, Path, MaxSize, SavType)
Dim StreamObj,StreamObj1
Set StreamObj = Server.CreateObject("ADODB.Stream")
Set StreamObj1 = Server.CreateObject("ADODB.Stream")
StreamObj.Mode = 3
StreamObj1.Mode = 3
StreamObj.Type = 1
StreamObj1.Type = 1
SaveFile = ""
StartPos = LenB(Divider) + 2
FormFileField = Chr(34) & FormFileField & Chr(34)
If Right(Path,1) <> "\" Then
Path = Path & "\"
End If
Do While StartPos > 0
strlen = InStrB(StartPos, FormData, bCrLf) - StartPos
SearchStr = MidB(FormData, StartPos, strlen)
If InStr(bin2str(SearchStr), FormFileField) > 0 Then
if GetFormVal("rename") ="yes" then
fext=right(GetFormVal("extname"),4)
randomize
ranNum=int(90000*rnd)+10000
FileName=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&fext
else
FileName = bin2str(GetFileName(SearchStr,path,SavType))
end if
If FileName <> "" Then
FileStart = InStrB(StartPos, FormData, bCrLf & bCrLf) + 4
FileLen = InStrB(StartPos, FormData, Divider) - 2 - FileStart
file_size=FileLen/1024
If FileLen <= MaxSize*1024 Then
FileContent = MidB(FormData, FileStart, FileLen)
StreamObj.Open
StreamObj1.Open
StreamObj.Write FormData
StreamObj.Position=FileStart-1
StreamObj.CopyTo StreamObj1,FileLen
If SavType =0 Then
SavType = 1
End If
StreamObj1.SaveToFile Path & FileName, SavType
StreamObj.Close
StreamObj1.Close
If SaveFile <> "" Then
SaveFile = SaveFile & "," & FileName
Else
SaveFile = FileName
End If
Else
If SaveFile <> "" Then
SaveFile = SaveFile & ",*TooBig*"
Else
SaveFile = "*TooBig*"
End If
End If
End If
End If
If InStrB(StartPos, FormData, Divider) < 1 Then
Exit Do
End If
StartPos = InStrB(StartPos, FormData, Divider) + LenB(Divider) + 2
Loop
End Function
- Aug 06 Wed 2008 14:45
-
轉:ASP實現圖文混合上傳,無須資料庫(二)
未測試
來源:網路流傳
代碼如下:
檔名: uploadx.asp
<% Dim FormData, FormSize, Divider, bCrLf
FormSize = Request.TotalBytes
FormData = Request.BinaryRead(FormSize)
bCrLf = ChrB(13) & ChrB(10)
Divider = LeftB(FormData, InStrB(FormData, bCrLf) - 1)
'將上傳的文件保存到path所指定的目錄下面。
'Formfield 上傳表單的"file"域名 Path
' 要保存文件的服務器絕對路徑,形式為:"d:\path\subpath"或"d:\path\subpath\"
'MaxSize 限制上傳文件的最大長度,以KByte為單位
' SavType 服務器保存文件的方式:
'0 唯一文件名方式,如果有同名則自動改名;
'1 報錯方式,如果有同名則出錯;
'2 覆蓋方式,如果有同名則覆蓋原來的文件
Function SaveFile(FormFileField, Path, MaxSize, SavType)
Dim StreamObj,StreamObj1
Set StreamObj = Server.CreateObject("ADODB.Stream")
Set StreamObj1 = Server.CreateObject("ADODB.Stream")
StreamObj.Mode = 3
StreamObj1.Mode = 3
StreamObj.Type = 1
StreamObj1.Type = 1
SaveFile = ""
StartPos = LenB(Divider) + 2
FormFileField = Chr(34) & FormFileField & Chr(34)
If Right(Path,1) <> "\" Then
Path = Path & "\"
End If
Do While StartPos > 0
strlen = InStrB(StartPos, FormData, bCrLf) - StartPos
SearchStr = MidB(FormData, StartPos, strlen)
If InStr(bin2str(SearchStr), FormFileField) > 0 Then
FileName = bin2str(GetFileName(SearchStr,path,SavType))
If FileName <> "" Then
FileStart = InStrB(StartPos, FormData, bCrLf & bCrLf) + 4
FileLen = InStrB(StartPos, FormData, Divider) - 2 - FileStart
If FileLen <= MaxSize*1024 Then
FileContent = MidB(FormData, FileStart, FileLen)
StreamObj.Open
StreamObj1.Open
StreamObj.Write FormData
StreamObj.Position=FileStart-1
StreamObj.CopyTo StreamObj1,FileLen
If SavType =0 Then
SavType = 1
End If
StreamObj1.SaveToFile Path & FileName, SavType
StreamObj.Close
StreamObj1.Close
If SaveFile <> "" Then
SaveFile = SaveFile & "," & FileName
Else
SaveFile = FileName
End If
Else
If SaveFile <> "" Then
SaveFile = SaveFile & ",*TooBig*"
Else
SaveFile = "*TooBig*"
End If
End If
End If
End If
If InStrB(StartPos, FormData, Divider) < 1 Then
Exit Do
End If
StartPos = InStrB(StartPos, FormData, Divider) + LenB(Divider) + 2
Loop
End Function