Commons FileUpload 1.2 버젼의 boundary 오류

Java|2008. 1. 4. 10:45
Commons FileUpload 1.2 버젼을 사용하여 ActiveX 업로드 컨트롤을 테스트 하던 중, "org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found"라는 에러 메시지를 보게 되었습니다. Commons FileUpload 사이트의 가이드를 따라 하던 중이라 별로 잘못한 건 없어보였는데 말이죠.

NetBeans에 포함된 HTTP Monitor의 도움을 받아(FiddlerHttpWatch는 ActiveX에서 발생하는 HTTP 통신을 볼 수 없더군요) HTTP Header 정보를 살펴보니 content-type은 아래와 같은 형식이었습니다.

multipart/form-data, boundary=ZYDa6MZ62846kJOUYu9kybvA750KGm3r

문제는 글자를 하나하나 아무리 뜯어봐도 boundary를 못찾을 이유가 없어 보인다는 겁니다.
결국 Commons FileUpload의 boundary 관련 소스를 다 뒤져보기에 이르렀는데... 이놈은 boundary 구분자로 세미콜론(;)을 사용하더군요. 제가 사용하는 업로드 컨트롤은 구분자로 쉼표(,)를 사용하고 있으니까 당연히 boundary를 못찾죠.
이걸 어떻게 해야하나... "직접 소스를 고칠까?" "이슈 등록을?" 등등의 고민을 하다가 구글링을 해봤더니 아파치재단의 버그 트래커에 이미 오류로 등록된 문제였습니다.

결론은 Commons FileUpload가 rfc1867을 지키지 않고 있다는 것입니다. 하지만 rfc1521은 세미콜론을 구분자로 제시하고 있고 대부분의 브라우져가 세미콜론을 구분자로 사용하기 때문에, 쉼표와 세미콜론을 모두 지원하는 방향으로 결정이 난 것 같습니다.

아래의 링크에서 관련 정보와 패치를 받으실 수 있습니다. 제가 패치한 jar 파일을 올리려다가 소스 등까지 다 같이 올려야하는게 귀찮아서 링크만 올립니다.

[fileupload] separator of boundary doesnt match rfc1867 examples

댓글()