19.File Upload


  의외로 C로 작성된 File Upload와 관련된 Source를 구하기 어렵다. 대부분 NT환경의 DLL이나, Perl이 주류를 이룬다. 그래서 일단 C로 어떻게 구현하는지 설명을 하겠다. 물론 최종적으로는 여러분이 원하는 Full Source Code를 제공할 것이지만, 좀 길어질 것 같다. 문제는 cgipost, cgiget과는 달리 코드를 이해하지 못하면 사용할 수 없다는 점이다.

  그래도, 어떻게 작성하는지 확실히 알아보자!

  먼저 File Upload를 위한 특별한 HTML Form Tag가 필요하다.

<FORM ACTION=upload METHOD=post ENCTYPE=multipart/form-data>
FileName : <INPUT TYPE=text NAME=FileName><BR>
FileData : <INPUT TYPE=file NAME=FileData><BR>
<INPUT TYPE=submit>
</FORM>


  이렇게 작성이 되면, 다음과 같은 화면이 나타나게 된다.


  위의 HTML Code중에서 파란 글씨를 주목하라. 기존의 Form Tag에서 사용되던 속성들 이외에 ENCTYPE이 추가 되었다. 또한 찾아보기 버튼을 위해 INPUT Type이 file로 정의되면 브라우저는 자동으로 TEXT 박스와 찾아보기 버튼을 생성하게 된다.

  자 일단, 어떻게 CGI쪽으로 데이터가 전달되는지 알기위하여 CGI강좌의 기초실습에서 제공되었던 stdin으로 들어오는 모든 문자를 출력하는 CGI를 사용하겠다. 왜냐하면, METHOD가 POST로 지정되어있기 때문이다.

  위 HTML Code중에서 ACTION부분에 upload라는 CGI가 지정되었으므로 실행파일명은 upload로 하겠다. 코드는 다음과 같다.

#include <stdio.h>

main()
{
    char ch;
    printf("Content-type: text/html\n\n");

    pritnf("<PRE>\n");
    while(1){
       fscanf(stdin,"%c", &ch);
       if( feof(stdin) ) break;
       printf("%c", ch);
    }
    printf("</PRE><HR>");
}


  여기서 <PRE></PRE> Tag를 쓴 이유는 stdin으로 들어오는 형태 그대로 출력하기 위함이다. 컴파일을 하고, HTML파일의 ACTION부분에 CGI의 경로를 정확히 수정하자.

  이제, 실제로 파일을 하나 올려보자. 여기서 일단 구조를 알려면 Text파일이 좋다. 다음과 같은 Text파일을 준비하자. 본인은 파일명을 deadfire.txt로 했다.

This is Test.

한글입력부분.

END

- Last Update : 2001.7.9 by Deadfire(http://www.deadfire.net)

CGI with C 활용
브라우저구분
환경변수LIST
클라이언트풀
서버푸쉬
Form Mail
진행현황보기
Cookie
MD5
File Download
SSI
Redirection
File Upload
GD1.2
Database
마치며

Copyright ⓒ 1997 ~, Deadfire Program Master