|
put 방식을 사용하신 코드 같습니다.
IIS냐 unix상의 apache냐가 문제가 아니라, put 방식을 지원하도록 설정했느냐 아니냐의 문제입니다.
put 방식은 말그대로 웹서버 상의 특정 디렉토리에 원하는 파일을 임의로 가져다 놓을 수가 있기 때문에 보안 상의 문제 등 여러가지 이유로 보통 설정상에서 꺼놓는 경우가 많습니다. apache 서버의 put 방식을 지원하도록 설정을 변경하신 후 테스트 해보시면 잘 될겁니다.
그러나, 일반적이 경우 put 방식은 대부분의 관리자들이 지원하지 않도록 설정하니 이 점도 유의하시는게 좋을 듯 합니다.
leo21c 님이 쓰신 글 :
: 아래와 같은 방법으로 MSDN에 있는 내용을 이용해서 WinInet의 함수들을 가지고 만들었습니다.
: UNIX 파일 서버에서 파일 다운로드는 문제없이 되는데 파일 업로드는 405에러가 발생하네요.
: WinInet함수들을 가지고 Unix로 파일 업로드는 불가능 한 건가요?
: 405에러라는 것이 Method Not Allowed라는 뜻인데....사용할 수 없다는 거 아닌가요?
:
: 제 컴퓨터는 WinXP로 IIS서버를 만들어서 테스트 할 경우에는 문제없이 작동하는 것을 확인했습니다.
: 그런데 Unix서버에 올릴때만 에러가 발생하네요.
: HTTP프로토콜을 이용해서 파일 업로드를 할 경우에 WinSock같은 것을 이용하는 것이 더 좋을까요?
:
: /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
: //인터넷 연결
: hInternet=InternetOpen("HTTPClient", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
: if (hInternet==NULL) return false;
:
: //URL을 연다.
: hURL = InternetConnect(hInternet, serverAddress/*Host 헤더값, 서버 주소*/, ServerURL.ID/*strID*/, URL.PW/*strPassword*/,
: INTERNET_SERVICE_HTTP, 0, 0);
:
: //인터넷 파일의 핸들을 얻는다.
: hRequest = HttpOpenRequest(hURL, "PUT", strRemoteFile, NULL, NULL,
: 0, INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, 0);
: if (!hRequest) goto exit;
:
: //로컬 파일의 핸들을 얻고, 사이즈를 저장한다.
: hLocalFile=CreateFile(strLocalFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
: if(!hLocalFile) goto exit;
: nFilesize = GetFileSize(hLocalFile, NULL);
:
: cBuffer = (char *)malloc(nFilesize); //메모리 할당 사용.
: if(!ReadFile(hLocalFile, cBuffer, nFilesize, &dwRead, NULL)) goto exit;
:
: //리퀘스트를 보낸다.
: bHttpSendRequest = HttpSendRequest(hRequest, NULL, NULL, cBuffer, dwRead);
:
: //http header로 전송 결과 확인
: if (!CheckSrvData(hRequest, Header, myParsedServerURL) || !(Header=="200" || Header=="201"))
: goto exit;
:
: //로컬파일 핸들을 마무리한다.
: if (hLocalFile)
: CloseHandle(hLocalFile);
: //인터넷파일 핸들을 마무리한다.
: if (hRequest)
: InternetCloseHandle(hRequest);
:
: return bHttpSendRequest; //bHttpSendRequest와 동일한 결과값을 리턴
:
: exit:
: //로컬파일 핸들을 마무리한다.
: if (hLocalFile)
: CloseHandle(hLocalFile);
: //인터넷파일 핸들을 마무리한다.
: if (hRequest)
: InternetCloseHandle(hRequest);
:
: return false; //bHttpSendRequest와 동일한 결과값을 리턴
|