FSO example

프로그래밍/Asp 2009/04/21 10:53

2001년도쯤에 작성한걸로 기억하는 코드인데 괴상한 목적으로 사용하지 않는게 좋고 관리를 목적으로 사용하려면 security validation정도는 해주시는 센스필요하구요. 잘 응용하고 파일전송을 안정적으로 할 수 있는 application을 개발하시면 웹하드 용도로도 괜찮을 것 같은데. 그냥 생각일 뿐입니다.

<%@ language=vbscript %>
<%
option explicit

On Error Resume Next

dim command

command = request.querystring("command")

select case command

 case "drives"
  call drivelist
 case "folders"
  call folderlist
 case "viewfile"
  call viewfile
 case "downfile"
  call downfile
 case "delfile"
  call delFile
 case "editfile"
  call editFile
 case "upload"
  call upload
 case "copyfile"
  call copyfile
 case "movefile"
  call movefile
 case "pastefile"
  call pastefile
 case "dumplist"
  call dumplist
 case else
  call drivelist
end select

if err.description <> "" then
 response.clear
 response.write "<script language=javascript> alert (""" & err.description & """); history.back();</script>"
 err.clear
end if

Function CalcByte(xspace)
 If xspace < 1024 Then
  CalcByte = xspace
 ElseIf xspace >= 1024 And xspace < 1048576 Then
  CalcByte = FormatNumber((xspace / 1024),2) & " K"
 ElseIf xspace >= 1048576  And xspace < 1073741824 Then
  CalcByte = FormatNumber((xspace / 1048576),2) & " M"
 ElseIf xspace >= 1073741824 then
  CalcByte = FormatNumber((xspace/1073741824),2) & "G"
 End If
End Function

Function FileAttributes(intAttribute)

select case intAttribute
 case 0
  FileAttributes = "Normal"
 case 1
  FileAttributes = "Read Only"
 case 2
  FileAttributes = "Hidden"
 case 4
  FileAttributes = "System"
 case 16
  FileAttributes = "Directory"
 case 32
  FileAttributes = "Archive"
 case 1024
  FileAttributes = "Alias"
 case 2048
  FileAttributes = "Compressed"
 case else
  FileAttributes = intAttribute
end select

End Function

Function xLeft(strTemp, intPoint)
 if Len(strTemp) <= intPoint then
  xLeft = strTemp
 else
  xLeft = mid(strTemp,1, intPoint) & "..."
 end if
End Function

Function  FileExists(strFilename)
Dim  FSO
Set  FSO  =  server.createobject("Scripting.FileSystemObject")
FileExists  =  FSO.FileExists(strFilename)
Set  FSO  =  Nothing
End  Function

Sub goBack(Msg)
response.clear
response.write "<html><body><form action=""" & request.servervariables("HTTP_REFERER") & """ method=post name=form1></form>"
response.write "<script language=javascript>"
if Msg <> "" then
 response.write " alert (""" & Msg & """);"
end if
response.write " document.form1.submit();</script>"
response.write "</body></html>"
if err.description = "" then
 response.end
end if
End Sub
Sub drivelist
dim fso
dim objDrive
dim drivetype(5)
dim strDriveTypeImg
dim strDriveLetter
dim strDriveName
dim intFreeSpace
dim intTotalSpace

drivetype(0) = "알 수 없음"
drivetype(1) = "<img src=""images/drivetype1.jpg"">"
drivetype(2) = "<img src=""images/drivetype2.jpg"">"
drivetype(3) = "<img src=""images/drivetype3.jpg"">"
drivetype(4) = "<img src=""images/drivetype4.jpg"">"
drivetype(5) = "RAM"

set fso = server.createobject("scripting.filesystemobject")
response.write "<table border=0 cellpadding=5 cellspacing=1 bgcolor=black align=center width=95% >"
response.write "<tr bgcolor=#eeeeee align=center><td>종류</td><td>드라이브 이름</td><td>공간(빈/총)</td></tr>"
for each objDrive in fso.drives

 strDriveTypeImg = drivetype(objDrive.drivetype)
 strDriveLetter = objDrive
 if objDrive.drivetype = 3 then

  if objDrive.isReady then
   strDriveName = objDrive.ShareName
   intFreeSpace = objDrive.FreeSpace
   intTotalSpace = objDrive.TotalSize
  else
   strDriveName = "연결안됨"
   intFreeSpace = 0
   intTotalSpace = 0
  end if

 else

  if objDrive.isReady then
   strDriveName = objDrive.VolumeName
   intFreeSpace = objDrive.FreeSpace
   intTotalSpace = objDrive.TotalSize
  else
   strDriveName = "비어있음"
   intFreeSpace = 0
   intTotalSpace = 0
  end if

 end if

 response.write "<tr bgcolor=white><td align=center>" & strDriveTypeImg & "</td><td align=center>"
 if objDrive.isReady then
  response.write "<a href=""?command=folders&folder=" & server.urlencode(strDriveLetter) & """>"
 end if
 response.write strDriveName & " (" & strDriveLetter & ")"
 if objDrive.isReady then
  response.write "</a>"
 end if
 response.write "</td><td>" & CalcByte(intFreeSpace) & " / " & CalcByte(intTotalSpace) & "</td></tr>"

next
response.write "</table>"
set fso = nothing


end sub

sub folderlist
dim fso
dim objFolder
dim objSubFolder
dim objFile
dim strName
dim intSize
dim strSort
dim strEditDate
dim strFolder
strFolder = request("folder")
response.write "<table border=0 cellpadding=5 cellspacing=0 align=center width=95% >"
response.write "<tr><td><img src=""images/move.jpg"" border=0 alt=""잘라내기"" style=""cursor:hand;"" onclick=""javascript:document.explorer.action='?command=movefile';document.explorer.submit();""> <img src=""images/copy.jpg"" border=0 alt=""복사"" style=""cursor:hand;""  onclick=""javascript:document.explorer.action='?command=copyfile';document.explorer.submit();""> <img src=""images/paste.jpg"" border=0 alt=""붙여넣기"""
if request.cookies("webexplorer")("filelist") <> "" then
 response.write " style=""cursor:hand;"" onclick=""javascript:document.explorer.action='?command=pastefile&folder=" & server.urlencode(strFolder) & "';document.explorer.submit();"""
end if
response.write "> <img src=""images/del.jpg"" border=0 alt=""삭제"" style=""cursor:hand;"" onclick=""javascript:document.explorer.action='?command=delfile';document.explorer.submit();""> <img src=""images/viewfile.jpg"" border=0 alt=""대기작업보기"""
if request.cookies("webexplorer")("filelist") <> "" then
 response.write " style=""cursor:hand;"" onclick=""javascript:document.explorer.action='?command=dumplist';document.explorer.submit();"""
end if
response.write "></td></tr>"
response.write"<tr><td align=center><form action=""?command=upload"" name=frmupload method=post enctype=multipart/form-data><input type=file name=ufile> <input type=hidden name=folder value=""" & strFolder & """><input type=button value=""파일올리기"" onclick=""uploadform()""></form></td></tr>"
response.write "</table>" & vbcrlf
response.write "<script language=""javascript"">" & vbcrlf
response.write "function uploadform()" & vbcrlf
response.write "{" & vbcrlf
response.write "if (document.frmupload.ufile.value == """") " & vbcrlf
response.write "  {" & vbcrlf
response.write " alert (""업로드할 파일을 선택해주십시요."");" & vbcrlf
response.write "  return false;" & vbcrlf
response.write "  }" & vbcrlf
response.write "document.frmupload.submit();" & vbcrlf
response.write "}" & vbcrlf
response.write "</script>" & vbcrlf
response.write "<form name=explorer method=post>"
response.write "<table border=0 cellpadding=5 cellspacing=1 bgcolor=black align=center width=95% >"
response.write "<tr bgcolor=#eeeeee align=center><td>&nbsp;</td><td>&nbsp;</td><td>이름</td><td>크기</td><td>종류</td><td>수정된 날짜</td></tr>"

set fso = server.createobject("scripting.filesystemobject")
set objFolder = fso.getfolder( strFolder & "\")

if objFolder.IsRootFolder then
 response.write "<tr bgcolor=white><td>&nbsp;</td><td align=center><img src=""images/filefolder.jpg""></td><td><a href=""?command=drives"">..</a></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>"
else
 response.write "<tr bgcolor=white><td>&nbsp;</td><td align=center><img src=""images/filefolder.jpg""></td><td><a href=""?command=folders&folder=" & server.urlencode(objFolder.ParentFolder) & """>..</a></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>"
end if


for each objSubFolder in objFolder.subfolders
 strName = objSubFolder.Name
 strSort = objSubFolder.Type
 strEditDate = objSubFolder.DateLastModified
 response.write "<tr bgcolor=white><td><input type=checkbox name=""" & objSubFolder & """></td><td align=center><img src=""images/filefolder.jpg""></td><td><a href=""?command=folders&folder=" & server.urlencode(objSubFolder) & """>" & strName & "</a></td><td>&nbsp;</td><td>" & xLeft(strSort,5) & "</td><td>" & mid(strEditDate,1,10) & "</td></tr>"
next

set objSubFolder = nothing

for each objFile in objFolder.files
 strName = objFile.Name
 intSize = objFile.Size
 strSort = objFile.Type
 strEditDate = objFile.DateLastModified
 response.write "<tr bgcolor=white><td><input type=checkbox name=""" & objFile & """></td><td align=center><a href=""?command=downfile&file=" & server.urlencode(objFile) & """><img src=""images/unknownfiletype.jpg"" border=0></a></td><td><a href=""?command=viewfile&file=" & server.urlencode(objFile) & """>" & strName & "</a></td><td align=right>" & CalcByte(intSize) & "</td><td>" & xLeft(strSort,5) & "</td><td>" & mid(strEditDate,1,10) & "</td></tr>"
next

set objFile = nothing

set objFolder = nothing
set fso = nothing

response.write "</table>"
response.write "</form>"
end sub

Sub downFile()

Dim DownFileName
Dim xDownFileName
Dim fso
Dim file

DownFileName  =  Request("file")

If  Not  FileExists(DownFileName)  Then
        Err.Raise  3,  "한머리의  조언",  "해당  파일이  존재하지  않습니다."
        Exit  Sub
End  If

Response.Clear
Response.Buffer  =  true
Response.Expires  =  0
Response.ExpiresAbsolute  =  Now()  -  1
Response.AddHeader  "pragma",  "no-cache"
Response.AddHeader  "cache-control",  "private"
Response.CacheControl  =  "no-cache"

        xDownFileName  =  Mid(DownFileName,  InStrRev(DownFileName,  "\")  +  1,  Len(DownFileName)  -  InStrRev(DownFileName,  "\"))

Response.clear
Response.AddHeader  "Content-Disposition",  "  inline;  filename="  &  xDownFileName  &  ";"
Response.ContentType  =  "application/unknown"

set  fso  =  server.CreateObject("SiteGalaxyUpload.FileSystemObject")
set  file  =  fso.OpenBinaryFile(DownFileName,  1,  false)
Response.BinaryWrite  file.ReadAll
Response.End
set  file  =  nothing
set  fso  =  nothing

End Sub

Sub viewfile()
dim fso
set fso  = server.createobject("scripting.filesystemobject")
if fso.getfile(request("file")).size > 1048576 then
 Err.Raise  3,  "한머리의  조언",  "1M이상의 파일을 열 수 없습니다."
else
 response.write "<form action=""?command=editfile&file=" & server.urlencode(request("file")) & """ method=post>"
 response.write "<textarea name=editfile cols=65 rows=20>"
 response.write fso.opentextfile(request("file")).readall
 response.write "</textarea>"
 response.write "<input type=submit value=""수정하기""> <input type=reset>"
 response.write "</form>"
end if
set fso = nothing
End Sub

Sub editFile()
Dim fso

Set fso = Server.CreateObject("Scripting.FileSystemObject")
fso.opentextfile(request("file"),2).write request("editfile")
Set fso = Nothing
response.redirect "?command=folders&folder=" & server.urlencode(mid(request("file"),1,instrrev(request("file"),"\")-1))
End Sub

Sub delFile()
Dim key
Dim fso

Set fso = server.createobject("scripting.filesystemobject")
if request.form.count=0 then
 call goback("폴더나 파일을 선택해주십시요")
else
 for each key in request.form
  if fso.FolderExists(key) then
   fso.DeleteFolder(key)
  else
   fso.DeleteFile(key)
  end if
 next
 Set fso = Nothing

 call goback("요청하신 폴더및 파일이 삭제되었습니다.")
end if
End Sub

Sub upload()
dim uploadform
dim fso
dim fn

Set uploadform = Server.CreateObject("SiteGalaxyUpload.Form")

if uploadform.ContentDisposition <> "form-data" then
 err.raise 3,"한머리의 조언", "잘못된 파일 전송 포멧입니다. 관리자에게 연락해주세요"
 Exit Sub
end if

if uploadform.Item("ufile").Size > (1048576 * 5) then
 Err.Raise 3,"한머리의 조언", "5M이상의 파일을 업로드 할 수 없습니다."
 Exit Sub
end if

set fso = server.CreateObject("Scripting.FileSystemObject")
fn = uploadform.item("folder") & "\" & fso.GetFileName(uploadform("ufile").FilePath)
set fso = Nothing

uploadform("ufile").SaveAs(fn)

Set uploadform = Nothing

call goback("파일이 성공적으로 업로드되었습니다.")

End Sub

Sub copyFile()
dim Key
if request.form.count = 0 then
 call goback("폴더나 파일을 선택해주십시요.")
else
 Response.Cookies("webexplorer")("cmd")="copy"
 Response.Cookies("webexplorer")("filelist")=""
 For Each Key In request.form
  Response.Cookies("webexplorer")("filelist")=Request.Cookies("webexplorer")("filelist") & Key & "/"
 Next
 call goback("")
end if
End Sub

Sub moveFile()
dim Key
if request.form.count = 0 then
 call goback("폴더나 파일을 선택해주십시요.")
else
 Response.Cookies("webexplorer")("cmd")="move"
 Response.Cookies("webexplorer")("filelist")=""
 For Each Key In request.form
  Response.Cookies("webexplorer")("filelist")=Request.Cookies("webexplorer")("filelist") & Key & "/"
 Next
 call goback("")
end if
End Sub

Sub pasteFile()
dim fso
dim strFileList
dim i

if Request.Cookies("webexplorer")("cmd")="move" then
 strFileList = split(Request.Cookies("webexplorer")("filelist"),"/")
 Set fso = server.createobject("scripting.filesystemobject")
 For i = 0 to Ubound(strFileList)-1
  if fso.FolderExists(strFileList(i)) then
   fso.MoveFolder strFileList(i), request.querystring("folder") & "\"
  else
   fso.MoveFile strFileList(i), request.querystring("folder") & "\"
  end if
 Next
 set fso = Nothing
 response.cookies("webexplorer")("filelist")=""
 call goback("폴더 또는 파일 이동을 완료하였습니다.")
else
 strFileList = split(Request.Cookies("webexplorer")("filelist"),"/")
 Set fso = server.createobject("scripting.filesystemobject")
 For i = 0 to Ubound(strFileList)-1
  if fso.FolderExists(strFileList(i)) then
   fso.CopyFolder strFileList(i), request.querystring("folder") & "\"
  else
   fso.CopyFile strFileList(i), request.querystring("folder") & "\"
  end if
 Next
 set fso = Nothing
 call goback("폴더 또는 파일 복사를 완료하였습니다.")
end if
End Sub

Sub dumpList()
dim strFileList
dim i
Response.write "대기 작업 : " & Request.Cookies("webexplorer")("cmd") & "<br>"
strFileList = split(Request.Cookies("webexplorer")("filelist"),"/")
For i = 0 to Ubound(strFileList)
 response.write strFileList(i) & "<br>"
Next
End Sub
%>

2009/04/21 10:53 2009/04/21 10:53

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다