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