본문 바로가기
Programming/ClassicASP

[SiteGalaxy] 다중업로드(파일중복방지)

by 막이 2015. 1. 26.
<form name="fwrite" action="app_ins.asp" method="post" enctype="multipart/form-data"><br />
첨부1 <input name="upfile1" type="file" /><br />
첨부2 <input name="upfile2" type="file" /><br />
<input type="submit" value="등록하기" />
</form>


[ 샘플1 ] 개별업로드
<%@ Language=VBScript %>
<%  Option Explicit   %>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
Dim sql, rs
Dim up_form
Set up_form = Server.CreateObject("SiteGalaxyUpload.Form")

'======================== 화일 업로드 ========================
dim fc, storedir, count, File_space, fexist
dim checkEmpty1, attach_file1, attach_size1, strname1, strext1, strfilename1, filename1
dim checkEmpty2, attach_file2, attach_size2, strname2, strext2, strfilename2, filename2
  
File_space  = 20000000   '업로드 20메가로 제한
set fc = Server.CreateObject("Scripting.FileSystemObject")
storedir=Server.MapPath("../..")+"\upload\landing\"
  
  checkEmpty1 = up_form("upfile1")
  if Len(checkEmpty1) > 0 then
    attach_file1  = up_form("upfile1").filepath   '파일이 저장될 경로를 지정
    attach_size1  = up_form("upfile1").size
    
    if Clng(attach_size1 / (1024 * 1000)) > Clng(File_space/ (1024 * 1000)) then
      Response.Write("<script language=javascript>")
      Response.Write("  alert('파일용량이 너무 큽니다.\n\n 20Mbyte 이상업로드 할수없습니다.');")
      Response.Write("  history.back();")
      Response.Write("</script>")
      Response.End 
    end if
    
    filename1    = mid(attach_file1, instrrev(attach_file1,"\")+1)     '경로명을 제외한 파일명을 축출
    strname1     = mid(filename1, 1, instrrev(filename1,".")-1)  '파일명에서 이름과 확장자를 분리
    strext1      = mid(filename1, instrrev(filename1,".")+1)
    strfilename1 = storedir & filename1
    
    if trim(strext1) = "asp" or trim(strext1) = "aspx"  or left(trim(strext1),3) = "htm" or  trim(strext1) = "exe" or trim(strext1) = "bat" or trim(strext1) = "com" then
      Response.Write("<script language=javascript>")
      Response.Write("  alert('업로드 금지된 파일입니다.\n\n 압축하여 올려주세요');")
      Response.Write("  history.back();")
      Response.Write("</script>")
      Response.End 
    end if
    
    fexist = true ' 같은이름의 파일이 존재한다고 가정한다.
    count = 0     ' 파일이 존재할 경우, 이름 뒤에 붙일 숫자를 세팅한다.
    do while fExist  ' 파일이 중복될 경우 이름을 다시 지정 -파일이름 뒤에 숫자를 붙여서 업
      if(fc.FileExists(strfilename1)) then
        count          = count + 1
        filename1    = strname1 &"-"& count &"."& strext1
        strfilename1 = storedir & filename1
      else
        fExist = false
      end if
    loop
    
    '콤포넌트에 의해 실지 파일을 업로드
    up_form("upfile1").saveas strfilename1
'response.write "filename1 = "& filename1 &"<br>"
  end if
  
  checkEmpty2 = up_form("upfile2")
  if Len(checkEmpty2) > 0 then
    attach_file2  = up_form("upfile2").filepath   '파일이 저장될 경로를 지정
    attach_size2  = up_form("upfile2").size
    
    if Clng(attach_size2 / (1024 * 1000)) > Clng(File_space/ (1024 * 1000)) then
      Response.Write("<script language=javascript>")
      Response.Write("  alert('파일용량이 너무 큽니다.\n\n 20Mbyte 이상업로드 할수없습니다.');")
      Response.Write("  history.back();")
      Response.Write("</script>")
      Response.End 
    end if
    
    filename2    = mid(attach_file2, instrrev(attach_file2,"\")+1)     '경로명을 제외한 파일명을 축출
    strname2     = mid(filename2, 1, instrrev(filename2,".")-1)  '파일명에서 이름과 확장자를 분리
    strext2      = mid(filename2, instrrev(filename2,".")+1)
    strfilename2 = storedir & filename2
    
    if trim(strext2) = "asp" or trim(strext2) = "aspx"  or left(trim(strext2),3) = "htm" or  trim(strext2) = "exe" or trim(strext2) = "bat" or trim(strext2) = "com" then
      Response.Write("<script language=javascript>")
      Response.Write("  alert('업로드 금지된 파일입니다.\n\n 압축하여 올려주세요');")
      Response.Write("  history.back();")
      Response.Write("</script>")
      Response.End 
    end if
    
    fexist = true ' 같은이름의 파일이 존재한다고 가정한다.
    count = 0     ' 파일이 존재할 경우, 이름 뒤에 붙일 숫자를 세팅한다.
    do while fExist  ' 파일이 중복될 경우 이름을 다시 지정 -파일이름 뒤에 숫자를 붙여서 업
      if(fc.FileExists(strfilename2)) then
        count          = count + 1
        filename2    = strname2 &"-"& count &"."& strext2
        strfilename2 = storedir & filename2
      else
        fExist = false
      end if
    loop
    
    '콤포넌트에 의해 실지 파일을 업로드
    up_form("upfile2").saveas strfilename2
'response.write "filename2 = "& filename2 &"<br>"
  end if


'response.write "filename1 = "& filename1 &"<br>"
'response.write "filename2 = "& filename2 &"<br>"

set fc=nothing
'======================== 화일 업로드 끝 ========================
sql = "insert into 테이블 (file필드1, file필드2) values"
sql = sql & "('"&filename1 &"'"
sql = sql &",'"& filename2 &"'"
sql = sql &")"
response.write "sql = "& sql &"<br>"
set rs = db.execute(sql)
set rs=nothing
%>


[ 샘플2 ] for문 활용 업로드 ... 미완성
<%@ Language=VBScript %>
<%  Option Explicit   %>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
Dim sql, rs
Dim up_form
Set up_form = Server.CreateObject("SiteGalaxyUpload.Form")

'======================== 화일 업로드 ========================
dim fc, storedir, count, File_space, fexist
dim i, checkEmpty(2), attach_file(2), attach_size(2), strname(2), strext(2), strfilename(2), filename(2)
dim filename1, filename2
  
File_space  = 20000000   '업로드 20메가로 제한
set fc = Server.CreateObject("Scripting.FileSystemObject")
storedir=Server.MapPath("../..")+"\upload\landing\"

for i=1 to 2
  checkEmpty(i) = up_form("upfile"&i)
  if Len(checkEmpty(i)) > 0 then
    attach_file(i)  = up_form("upfile"&i).filepath   '파일이 저장될 경로를 지정
    attach_size(i)  = up_form("upfile"&i).size
    
    if Clng(attach_size(i) / (1024 * 1000)) > Clng(File_space/ (1024 * 1000)) then
      Response.Write("<script language=javascript>")
      Response.Write("  alert('파일용량이 너무 큽니다.\n\n 20Mbyte 이상업로드 할수없습니다.');")
      Response.Write("  history.back();")
      Response.Write("</script>")
      Response.End 
    end if
    
    filename(i)    = mid(attach_file(i), instrrev(attach_file(i),"\")+1)     '경로명을 제외한 파일명을 축출
    strname(i)     = mid(filename(i), 1, instrrev(filename(i),".")-1)  '파일명에서 이름과 확장자를 분리
    strext(i)      = mid(filename(i), instrrev(filename(i),".")+1)
    strfilename(i) = storedir & filename(i)
    
    if trim(strext(i)) = "asp" or trim(strext(i)) = "aspx"  or left(trim(strext(i)),3) = "htm" or  trim(strext(i)) = "exe" or trim(strext(i)) = "bat" or trim(strext(i)) = "com" then
      Response.Write("<script language=javascript>")
      Response.Write("  alert('업로드 금지된 파일입니다.\n\n 압축하여 올려주세요');")
      Response.Write("  history.back();")
      Response.Write("</script>")
      Response.End 
    end if
    
    fexist = true ' 같은이름의 파일이 존재한다고 가정한다.
    count = 0     ' 파일이 존재할 경우, 이름 뒤에 붙일 숫자를 세팅한다.
    do while fExist  ' 파일이 중복될 경우 이름을 다시 지정 -파일이름 뒤에 숫자를 붙여서 업
      if(fc.FileExists(strfilename(i))) then
        count          = count + 1
        filename(i)    = strname(i) &"-"& count &"."& strext(i)
        strfilename(i) = storedir & filename(i)
      else
        fExist = false
      end if
    loop
    
    '콤포넌트에 의해 실지 파일을 업로드
    up_form("upfile"&i).saveas strfilename(i)
    response.write "filename"& i &" = "& filename(i) &"<br>"
  end if
next

fexist = true
count = 0

' 해결못한 부분은 아래입니다. 중복확인후 처리된 파일이름이 추출이 안됩니다.
response.write "filename1 = "& filename1 &"<br>"
response.write "filename2 = "& filename2 &"<br>"

'set fc=nothing
'======================== 화일 업로드 끝 ========================
sql = "insert into 테이블 (file필드1, file필드2) values"
sql = sql & "('"&filename1 &"'"
sql = sql &",'"& filename2 &"'"
sql = sql &")"
response.write "sql = "& sql &"<br>"
set rs = db.execute(sql)
set rs=nothing
%>


출처 : http://www.happyjung.com/bbs/board.php?bo_table=lecture&sca=ClassicASP


'Programming > ClassicASP' 카테고리의 다른 글

[Classic ASP] 배열  (0) 2015.03.06
[asp] 계층형 게시판  (1) 2015.02.13
ASP 첨부파일 다운로드  (0) 2015.01.26