code:
<%
'------------------------------------- ---------
'**************** Foil no component upload class 2.0 ***************************
'Author: wind
'website:
http://www.17560.net
http://www.54nb.com
'Mail: rumor@17560.net
'Copyright: All rights, source code is open, all use can be used free
'********************************************************** **********
'------------------------------------- ---------
Class UploadClass
Private p_maxsize, p_filetype, p_savepath, p_autosave, p_error
Private Objform, Binform, Binitem, StRDATE, LNGTIME
Public FormItem, FileItem
Public property Get Version
Version = "Rumor UploadClass Version 2.0"
End Property
Public property Get Error
Error = p_error
End Property
Public property get maxsize
MaxSize = p_maxsize
End Property
Public Property Let MaxSize (LNGSIZE)
IF isnumeric (lngsize) THEN
p_maxsize = clng (LNGSIZE)
END IF
End Property
Public property Get FileType
FILETYPE = P_FileType
End Property
Public property Let FileType (StrtYPE)
p_filetype = startpe
End Property
Public property Get SavePath
SavePath = p_savepath
End Property
Public Property Let SavePath (StrPath)
p_savepath = replace (strpath, chr (0), "")
End Property
Public property Get AutoSave
AutoSave = p_autosave
End Property
Public property let autosave (Byval Flag)
SELECT CASE FLAG
Case 0:
Case 1:
Case 2:
Case False: Flag = 2
Case Else: Flag = 0
End SELECT
p_autosave = flag
End Property
Private sub coplass_initialize
p_error = -1
p_maxsize = 153600
p_filetype = "jpg / gif"
p_savepath = "" "
p_autosave = 0
STRDATE = Replace (CSTR (Date ()), "-", "")
LNGTIME = ClNG (Timer () * 1000)
Set binform = server.createObject ("adodb.stream") set binitem = server.createObject ("adodb.stream")
Set Objform = Server.createObject ("scripting.dictionary")
Objform.comParemode = 1
End Sub
Private sub coplass_terminate
Objform.removeall
Set objform = Nothing
Set binitem = Nothing
Binform.close ()
Set binform = Nothing
End Sub
Public Sub open ()
IF p_error = -1 Then
P_ERROR = 0
Else
EXIT SUB
END IF
Dim LngRequestsize, BinRequestData, StrformItem, StrfileItem
Const strsplit = "'" ">"
LNGREQUESTSIZE = Request.totalbytes
IF lngRequestsize <1 THEN
p_ERROR = 4
EXIT SUB
END IF
BinRequestData = Request.binaryRead (LNGRequestsize)
Binform.Type = 1
Binform.open
Binform.write binRequestData
DIM BCRLF, STRSEPARATOR, INTSEPARATOR
BCRLF = Chrb (13) & chrb (10)
INTSEPARATOR = INSTRB (1, BinRequestData, BCRLF) -1
Strseparator = Leftb (binRequestData, INTSEPARATOR)
DIM P_START, P_END, STRITEM, STRINAM, INTTEMP, STRTEMP
DIM STRFTYP, STRFNAM, STRFEXT, LNGFSIZ
p_start = INTSEPARATOR 2
DO
P_END = INSTRB (P_Start, BinRequestData, BCRLF & BCRLF) 3
Binitem.Type = 1
Binitem.open
Binform.position = p_start
Binform.couthto Binitem, P_END-P_START
Binitem.position = 0
Binitem.Type = 2
Binitem.Charset = "GB2312"
Stritem = Bintem.readText
Binitem.close ()
p_start = p_end
p_END = INSTRB (p_start, binRequestData, strsEParetor) -1
Binitem.Type = 1
Binitem.open
Binform.position = p_start
LNGFSIZ = P_END-P_START-2
Binform.couthto Binitem, LNGFSIZ
INTTEMP = INSTR (39, Stritem, "" "")
Strinam = MID (Stritem, 39, INTEMP-39)
IF INSTEMEM, "FileName =" "") <> 0 Thenif Not Objform.exists (Strinam & "_ from") THEN
StrfileItem = StrfileItem & strsplit & strinam
IF binitem.size <> 0 THEN
INTTEMP = INTTEMP 13
StrfTyp = MID (Stritem, INSTR (INTTEMP, STRITEM, "Content-Type:") 14)
Strtemp = MID (StriteM, INTTEMP, INSTR (INTTEMP, STRITEM, "" ") - INTTEMP)
INTTEMP = INSTRREV (strTemp, "/")
Strfnam = MID (strTemp, INTTEMP 1)
Objform.add Strinam & "_ type", strftyp
Objform.add Strinam & "_ name", strfnam
Objform.add Strinam & "_ Path", Left (Strtemp, INTTEMP)
Objform.Add Strinam & "_ size", LNGFSIZ
IF INSTR (INTTEMP, STRTEMP, ".") <> 0 THEN
Strfext = MID (Strtemp, INSTRRREV (strTemp, ".") 1)
Else
Strfext = "" "
END IF
IF LEFT (StrfTyp, 6) = "Image /" THEN
Binitem.position = 0
Binitem.Type = 1
Strtemp = Bintem.read (10)
IF STRCOMP (Strtemp, CHRB (255) & chrb (216) & chrb (255) & chrb (224) & chrb (0) & chrb (16) & chrb (74) & chrb (70) & chrb (73) & Chrb (70), 0) = 0 THEN
If LCASE (STRFEXT) <> "jpg" Then Strfext = "jpg"
Binitem.position = 3
Do While Not Bintem.eos
DO
INTTEMP = ASCB (Binitem.Read (1))
Loop while intTEMP = 255 and not binitem.eos
IF INTTEMP <192 or IntTemp> 195 Then
Bintem.read (bin2val (binitem.read (2)) - 2)
Else
Exit do
END IF
DO
INTTEMP = ASCB (Binitem.Read (1))
Loop While IntTemp <255 and not binitem.eos
loop
Bintem.read (3)
Objform.add Strinam & "_ Height", Bin2val (Binitem.Read (2))
Objform.add Strinam & "_ width", bin2val (binitem.read (2))
Elseif Strcomp (Leftb (Strtemp, 8), CHRB (137) & chrb (80) & chrb (78) & chrb (71) & chrb (13) & chrb (10) & chrb (26) & chrb (10), 0) = 0 THENIF LCASE (STRFEXT) <> "png" the StrFext = "PNG"
Binitem.Position = 18
Objform.add Strinam & "_ width", bin2val (binitem.read (2))
Binitem.read (2)
Objform.add Strinam & "_ Height", Bin2val (Binitem.Read (2))
Elseif Strcomp (LEFTB (STRTEMP, 6), CHRB (71) & chrb (73) & chrb (70) & chrb (56) & chrb (57) & chrb (97), 0) = 0 or strcomp (standb (strTemp , 6), CHRB (71) & chrb (73) & chrb (70) & chrb (56) & chrb (55) & chrb (97), 0) = 0 THEN
If LCASE (STRFEXT) <> "gif" the StrFext = "gif"
Binitem.position = 6
Objform.add Strinam & "_ width", binval2 (binitem.read (2))
Objform.add strinam & "_ height", binval2 (Binitem.Read (2))
Elseif Strcomp (LEFTB (Strtemp, 2), Chrb (66) & Chrb (77), 0) = 0 THEN
If LCASE (STRFEXT) <> "bmp" Then Strfext = "BMP"
Binitem.Position = 18
Objform.add Strinam & "_ width", binval2 (binitem.read (4))
Objform.add Strinam & "_ Height", binval2 (Binitem.Read (4))
END IF
END IF
Objform.add Strinam & "_ EXT", strgrfect
Objform.Add Strinam & "_ from", P_Start
INTTEMP = GetFerr (LNGFSIZ, STRFEXT)
IF P_AUTOSAVE <> 2 THEN
Objform.add Strinam & "_ Err", IntTemp
IF INTTEMP = 0 THEN
IF p_autosave = 0 THEN
Strfnam = getTimeStr ()
IF strgrfext <> "" "" & strfext
END IF
Binitem.Savetofile Server.mappath (p_savepath & strfnam), 2
Objform.add Strinam, Strfnam
END IF
END IF
Else
Objform.Add Strinam & "_ Err", - 1
END IF
End ifelse
Binitem.position = 0
Binitem.Type = 2
Binitem.Charset = "GB2312"
Strtemp = Binitem.ReadText
IF Objform.exists (Strinam) THEN
Objform (Strinam) = Objform (Strinam) & "& Strtemp
Else
StrformItem = Strformitem & Strsplit & Strinam
Objform.add Strinam, Strtemp
END IF
END IF
Binitem.close ()
p_start = p_end INTSEPArator 2
Loop unsil p_start 3> LNGRequestsize
FormItem = SPLIT (StrformItem, strsplit)
FileItem = SPLIT (StrfileItem, strsplit)
End Sub
Private function getTimeStr ()
LNGTIME = LNGTIME 1
GetTimeStr = STRDATE & LNGTIME
END FUNCTION
Private function GetFerr (LNGFSIZ, STRFEXT)
DIM INTFERR
INTFERR = 0
IF LNGFSIZ> P_MAXSIZE AND P_MAXSIZE> 0 THEN
IF p_error = 0 or p_ERROR = 2 THEN P_ERROR = P_ERROR 1
INTFERR = INTFERR 1
END IF
IF INSTR (1, LCase ("/"), LCase ("/" & strfext & ")) = 0 and p_filetype <>" "" "
IF p_ERROR <2 THEN P_ERROR = P_ERROR 2
INTFERR = Intferr 2
END IF
GetFerr = Intferr
END FUNCTION
Public Function Save (Item, Strfnam)
Save = false
IF Objform.exists (item & "_") THEN
DIM INTFERR, STRFEXT
Strfext = Objform (item & "_ _")
INTFERR = GetFerr (Objform (item & "i _ _"), strgrfext)
IF Objform.exists (item & "_ err") THEN
IF intferr = 0 THEN
Objform (item & "_ er") = 0
END IF
Else
Objform.Add Item & "_ Err", intferr
END IF
IF Intferr <> 0 THEN EXIT FUNCTION
if Vartype (Strfnam) = 2 THEN
Select Case Strfnam
Case 0: Strfnam = getTimeStr ()
IF strgrfext <> "" "" & strfext
Case 1: Strfnam = Objform (item & "_ name")
End SELECT
END IF
Binitem.Type = 1
Binitem.open
Binform.Position = Objform (item & "_ from")
Binform.copyto Binitem, Objform (item & "_ size")
Binitem.Savetofile Server.mappath (p_savepath & strfnam), 2
Binitem.close ()
IF Objform.exists (item) THEN
Objform (item) = strfnam
Else
Objform.Add item, strfnam
END IF
Save = true
END IF
END FUNCTION
Public Function GetData (item)
GetData = ""
IF Objform.exists (item & "_") THEN
IF GetFerr (Objform (item & "_ size"), objform (item & "_ ext") <> 0 THEN EXIT FUNCTION
Binform.Position = Objform (item & "_ from")
GetData = BinformStream.read (Objform (item & "_ size"))
END IF
END FUNCTION
Public Function Form (Item)
IF Objform.exists (item) THEN
Form = Objform (item)
Else
Form = ""
END IF
END FUNCTION
Private function binval2 (bin)
Dim lngvalue, i
LNGVALUE = 0
For i = lenb (bin) TO 1 Step -1
LNGVALUE = LNGVALUE * 256 ASCB (MIDB (BIN, I, 1)))
NEXT
Binval2 = lngvalue
END FUNCTION
Private function bin2val (bin)
Dim lngvalue, i
LNGVALUE = 0
For i = 1 to lenb (bin)
LNGVALUE = LNGVALUE * 256 ASCB (MIDB (BIN, I, 1)))
NEXT
Bin2val = LNGVALUE
END FUNCTION
END CLASS
%>