DEXT.FileUploaad를 사용하였습니다.

파일 업로드

write.asp

<form id="Form" action="write_db.asp" method="post" enctype="multipart/form-data">
  <fieldset>
    <legend>FORM</legend>
    <!-- chkword(this, 20) : javascript 글자 수 제한 함수 -->
    <!-- checkAll() : javascript 공백 여부 확인 함수 -->
    <div class="form-group">
      <label> 작성자</label>
      <input type="text" name="userWriter" id="userWriter" class="form-control" onkeyup="chkword(this, 20)" placeholder="Enter writer"/>
    </div>
    <div class="form-group">
	    <label> 제목</label>
    	<input type="text" name="userTitle" id="userTitle" class="form-control" onkeyup="chkword(this, 60)" placeholder="Enter title"/>
    </div>
    <div class="form-group">
    	<label> 내용</label>
    	<textarea name="userContent" id="userContent" class="form-control" onkeyup="chkword(this, 200)" rows="5" cols="70" wrap="hard"></textarea>
    </div>
    <div class="form-group">
        <label> 첨부파일</label><br/>
    	<input type="file" name="file"><br>
    </div>
    <div class="form-group">
    	<label>글 비밀번호</label>
    	<input type="password" name="userPassword" id="userPassword" class="form-control" onkeyup ="chkword(this, 15)"  placeholder="Password"/>
    </div>
    <div style="text-align:center">
    	<input type="button" class="btn btn-primary" value="글 작성" onclick="checkAll()">
    	<input type="button" style="text-align:left" class ="btn btn-secondary" value="목록" onclick="location.href='/Board_asp/list.asp'">
    </div>
  </fieldset>
</form>

form태그에 enctype="multipart/from-data"를 추가해주고, <input type="file">을 추가해준다.

 

write_db.asp

' 파일 업로드 
Set uploadform = Server.CreateObject("DEXT.FileUpload")
path = "/Board_asp/upload"			
up_path = server.MapPath(path)
uploadform.DefaultPath=up_path
fileLen = uploadform("file").FileLen

uploadform.AutoMakeFolder = True		'폴더생성 여부
uploadform.DefaultPath    = up_path		'폴더위치 설정
uploadform.MaxFileLen     = 5242880 	'파일크기 제한 : 5242880(5M)
uploadform.UploadTimeout  = 1800	

server.MapPath : 경로를 반환하는 기능으로 파일을 업/다운로드 할 때 주로 사용합니다.

uploadform.FileLen : 업로드된 파일의 길이를 나타냅니다.

uploadform.AutoMakeFolder : 폴더가 존재 하지 않을 경우 자동으로 생성합니다.

uploadform.DefaultPath : 파일이 저장될 폴더 경로를 설정합니다.

uploadform.MaxFileLen : 하나의 파일 크기를 5M으로 제한합니다.

uploadform.UploadTimeout : 업로드 Timeout을 설정합니다. 

 

Dim Writer, Password, Title, Contents, oldname     

Writer = uploadform("userWriter")
Password = uploadform("userPassword")
Title = uploadform("userTitle")
Content = uploadform("userContent")
oldname = uploadform("file").FileName   '업로드한 파일 이름

form태그의 enctype이 multipart/form-data인 경우,

ASP에서 request.form 객체로 form데이터를 얻을 수 없으므로Request.Form으로 받은 파라미터를 uploadform으로 바꿔줍니다.

 

' 파일 용량 체크
If fileLen > uploadform.MaxFileLen Then
  response.write "<script language=""javascript"">alert('5M 이상의 사이즈인 파일은 업로드하실 수 없습니다.');"
  Response.Write "history.back(-1);"
  Response.Write "</script>"
  set theForm=nothing
  Response.end

  set fileLen = nothing
  response.End
else
  filePath = uploadform.Save
  	...

uploadform.Save : 업로드된 파일을 서버에 디스크파일 형태로 저장합니다.

 

파일 다운로드

<%
    no_param = request.QueryString("no")

    Set oraConn = Server.CreateObject("ADODB.Connection")
    oraConn.Open("dsn={};uid={};pwd={};")
  
    Set oraRec = Server.CreateObject("ADODB.Recordset")

    sql = "SELECT FILENAME FROM BOARD WHERE USETF = 1 AND NO =" & no_param

    oraRec.Open sql, oraConn
    
    set rs = oraConn.Execute(sql)

    ' 첨부파일 다운로드
    Dim file
    file = rs(0)
    strPath = Server.MapPath("upload/" & file &"")
    Response.AddHeader "Content-Disposition","attachment; filename=" & file &""""
    Response.ContentType = "application/x-msdownload"

    Response.CacheControl = "private"

    Set objFS = Server.CreateObject("Scripting.FileSystemObject")
    Set objF = objFS.GetFile(strPath)

    Response.AddHeader "Content-Length", objF.Size

    set objF = nothing
    set objFS = nothing
    
    Set objStream = Server.CreateObject("ADODB.Stream")
    objStream.Open
    objStream.Type = 1
    objStream.LoadFromFile(strPath)

    download = objStream.Read
    Response.BinaryWrite download

    Set objstream = nothing
%>

 

※ 동일 이름의 파일 저장 시 (1), (2) 이런 식으로 저장하여 파일을 덮어쓰지 않는다.

filePath = uploadform.SaveAs(oldname, False)        // 파일 저장 (동일 이름 파일 저장 시 (1), (2) 이런 식으로 저장됨)
strLen = Len(filePath)                              // 파일 경로의 전체 길이
ipos = instrRev(filePath, "\")                      // 문자 '\' 마지막에 위치하는 자리 수 
uploadFile = MID(filePath, ipos+1, (strLen-ipos))   // ipos+1부터 (strLen-ipos)개의 문자를 반환 => 저장된 파일 명

 

1. DB에 실제 저장되는 파일의 이름을 담을 컬럼(UPLOADFILE)을 추가한다.

  • FILENAME : 업로드 할 첨부 파일의 이름
  • UPLOADFILE : 폴더에 저장되는 첨부 파일의 이름 

2. uploadform.SaveAs(oldname, False) 로 파일 저장된다. 

  • 동일 이름의 파일이 있을 시 (1), (2) 이런 식으로 저장된다.
  • filePath에는 첨부 파일의 주소가 저장된다.

3. Len(filePath) : 첨부 파일 경로의 전체 길이를 구한다.

4. instrRev(filePath, "\") : 다른 문자열 내에서 문자 '\'의 발생 위치를 문자열 끝에서부터 계산하여 반환한다.

5. MID(filePath, ipos + 1, (strLen - ipos)) : ipos + 1부터 (strLen - ipos)개의 문자를 반환한다. => UPLOADFILE 

+ Recent posts