' 파일 업로드
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, "\") : 다른 문자열 내에서 문자 '\'의 발생 위치를 문자열 끝에서부터 계산하여 반환한다.
ODBC는 데이터베이스를 엑세스하기 위한 표준 개방형 응용 프로그램 인터페이스를 말합니다.
마이크로소프트사에 의해 만들어진, 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격으로,
프로그램 내에 ODBC 문장을 사용하면 여러 종류의 데이터베이스에 접근할 수 있습니다.
ASP 페이지에서 데이터베이스 연동
ASP에서는 데이터베이스와의 연동을 위해서 3가지 개체를 제공하고 있습니다.
Connection Object (ADODB.Connection)
Recordset Object (ADODB.Recordset)
Command Object (ADODB.Command)
1. Connection 개체
Connection 개체는 특정 데이터베이스와 연결을 할 수 있게 해주는 개체이며, 리턴 결과 레코드가 없는 간단한 쿼리를 수행할 수 있습니다.
Set oraConn = Server.CreateObject("ADODB.Connection")
oraConn.Open("dsn={dsn};uid={uid};pwd={pwd}")
Server.CreateObject가 하는 역할은 ASP에서 사용이 가능한 개체의 인스턴스를 만들어주는 역할을 하는 메소드입니다. Connection 개체의 가장 큰 역할은 데이터베이스와 연결(Open메소드) 하는 것입니다.
그 이외에도 반환 결과 레코드가 없는 쿼리(INSERT, UPDATE, DELETE)의 경우를 실행할 수 있는 기능(Execute 메소드)도 가지고 있습니다.
2. Recordset 개체
Recordset 개체는 쿼리 결과로 추출된 데이터를 보관하는 역할을 해주는 개체이며, Connection 개체와 마찬가지로 Open메소드를 가지고있습니다.
첫 번째 인자는 쿼리문으로 넣고, 두 번째 인자는 데이터베이스 Connection 개체입니다.
Set oraRec = Server.CreateObject("ADODB.Recordset")
sql = "SELECT * FROM BOARD"
oraRec.Open sql, oraConn
ASP에서 데이터 보여주기 (SELECT)
<%
Set oraConn = Server.CreateObject("ADODB.Connection")
oraConn.Open("dsn={dsn}; uid={uid}; pwd={pwd}")
Set Rs = Server.CreateObject("ADOBO.RecordSet")
SQL = "SELECT * FROM BOARD"
oraRec.Open sql, oraConn
%>
<HTML>
<HEAD><TITLE> ASP DB 연결하기 </TITLE></HEAD>
<BODY>
<% If oraRec.BOF Then %>
요구하신 데이터가 없습니다.
<% Else %>
<% Do Until oraRec.EOF %>
작성자는 <%=oraRec("writer")%>,
제목은 <%=oraRec("title")%> 입니다.
<% oraRec.MoveNext %>
<% Loop %>
<% End If %>
</BODY>
</HTML>
13줄은 데이터가 하나도 없을 경우를 위한 처리입니다.
BOF는 Begin Of File로레코드 셋의 시작,EOF는 End Of File로레코드 셋의 끝을 의미한다. 레코드가 하나가 아닌 경우 가상 테이블의 형태로 레코드셋이 저장되고 그 시작과 끝을 구분해주는 것이 BOF와 EOF이다.
DB에 데이터가 있는 경우 oraRec.EOF와 oraRec.BOF는 false가 되고데이터가 없는 경우 true가 된다.
ASP에서 데이터 입력하기 (INSERT, UPDATE, DELETE)
ASP에서 데이터를 출력할 때는 그 데이터를 담을 Recordset개체가 필요했지만
데이터 입력의 경우 Connection 개체와 함께 쿼리를 실행할 Execute 메소드를 통해 데이터를 입력합니다. (데이터를 담을 필요가 없기 때문에 Recordset개체는 필요 없습니다.)
<%
Writer = "작성자"
Title = "제목"
Set oraConn = Server.CreateObject("ADODB.Connection")
oraConn.Open("dsn={dsn};uid={uid};pwd={pwd}")
Set oraRec = Server.CreateObject("ADODB.Recordset")
sql = "INSERT INTO BOARD(WRITER, TITLE) VALUES "
sql = sql & Writer &"' WRITER, '"
sql = sql & Title &"' TITLE)"
oraRec.Execute sql
%>
collapse : 겹치도록 지정 (테이블의 행과 열 요소만 지정할 수 있으며, 그 외 요소는 hidden으로 해석)
inherit : 부모 요소의 값을 상속 (기본 값)
display 속성
display 속성은 요소를 어떻게 보여줄지를 결정한다.
none : 보이지 않음 (영역 차지 X)
block : 블록 박스
inline : 인라인 박스
inline-block : block과 inline의 중간 형태
1) block
div 태그, p 태그, h 태그, li 태그 등이 해당
기본적으로 가로 영역을 모두 채우며, block 요소 다음에 등장하는 태그는 줄 바꿈이 된 것처럼 보인다.
width, height 속성을 지정할 수 있다.
2) inline
span 태그, b 태그, i태그, a태그 등이 해당
block과 달리 줄 바꿈이 되지 않고, width와 height를 지정할 수 없다.
글자나 문장에 효과를 주기 위해 존재하는 단위이다.
3) inline-block
block과 inline의 중간 형태라고 볼 수 있는데, 줄 바꿈이 되지 않지만 크기를 지정할 수 있다.
Internet Explorer 7 이하에서는 사용할 수 없다.
float 속성
float라는 단어는 '뜨다'라는 의미이며, 웹 페이지에서 이미지를 어떻게 띄워서 텍스트와 함께 배치할 것인가에 대한 속성이다.
inherit : 부모 요소에서 상속
left : 왼쪽에 부유하는 블록 박스를 생성. 페이지 내용은 박스 오른쪽에 위치하며 위에서 아래로 흐름.
right : 오른쪽에 부유하는 블록 박스를 생성. 페이지 내용은 박스 왼쪽에 위치하며 위에서 아래로 흐름. 이후 요소에 clear 속성이 있으면 페이지 흐름이 달라짐. none이 아니라면 display 속성은 무시된다.
none : 요소를 부유시키지 않음
left와 right를 통해 부유 속성을 지정 시 display는 무시된다.
예제
<html>
<head>
<style>
.float-container{
width: 320px;
border: 2px solid #09c;
}
.float-container img{
float: left;
margin: 5px;
padding: 5px;
border: 2px solid #90C;
}
</style>
</head>
<body>
<div class="float-container">
<img src="/images/attach/earth.jpg">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
</body>
</html>