파일업로드

[파일업로드] <form> 방식

레파캣 2016. 9. 11. 13:54

사용자로부터 입력받은 파일을 서버로 보내는 방법은 크게 두가지가 있다. <form> 태그를 이용한 전송과 Ajax 방식이다. <form> 방식은 <input> 태그를 이용하여 사용자로부터 파일을 선택하게 하고 form.submit() 을 통해 서버로 전송하는 방식이다. Ajax 방식은 사용자가 선택한 파일을 XMLHttpRequest 에 실어서 서버에 보내는 방식이다. 

 

이 포스팅에서는 <form> 을 사용하는 방식을 다뤄본다.

 

1
2
3
4
<form id="form1" action="uploadForm" method="post" enctype="multipart/form-data" target="repacatFrame">
    <input type="file" name="file">
    <input type="submit">
</form>
cs

 

 

파일 전송을 위한 <form> 의 모양은 대략 위와 같다. 화면상에는 아래와 같이 나온다.

 

 

파일전송 form 에서 주의해서 설정해야할 attribute 는 바로 entype 이다. 

 

w3schools 에는 아래와 같이 설명이 나온다. enctype attribute 가 가질 수 있는 값은 3개인데, <form> 내에 <input type="file"> 이 있을 경우 "multipart/form-data" 로 지정해줘야 한다. 지정하지 않을 경우 "application/x-www-form-urlencoded" 가 default 로 설정된다.

 

enctype application/x-www-form-urlencoded
multipart/form-data
text/plain
Specifies how the form-data should be encoded when submitting it to the server (only for method="post")

 

 

한가지 더 알아야 할 attribute 는 target 이다. 

 

target _blank
_self
_parent
_top
Specifies where to display the response that is received after submitting the form

 

target 속성은 <form> 이 submit 되고 난 뒤 서버로부터 받는 response 를 표시할 대상을 지정하는 것이다. default 로 <form> 이 포함된 문서이며 이 때문에 <form> 을 전송한 후에는 화면 전체가 서버에서 받은 response 로 리프레시 된다. <form> 에 target 을 <iframe> 으로 지정함으로써 화면 전체 갱신을 하지 않을 수 있다. 

 

위의 <form> 에서는 "repacatFrame" 이라는 iframe 을 지정함으로써 response 가 iframe 으로 전달된다. 서버에서 아래와 같은 response 를 생성하여 부모 layer 의 함수를 호출할 수 있다.

 

1
2
3
4
<script>
var result = '${savedName}';
parent.addFilePath(result);
</script>
cs