jQuery FileUpload plugin은 Action 페이지를 호출할때 PUT, DELETE 등의 Method를 사용하여 처리하도록 되어있는데 IIS6 버전에서는 WebDAV라는 옵션이 기본적으로 금지되어 있어서 HTTP 501 오류가 난다.
WebDAV를 허용하고 테스트를 해 봐도 HTTP 403 쓰기권한이 없다고 나온다.
쓰기권한을 줄경우 서버폴더가 삭제되어버리는 사태가 생겼다.
보안위험을 무릅쓰고 이런 처리를 하는것 보다 안전한 Method로 변경하여 처리하도록 바꿔보았다.
js/jquery.fileupload-ui.js 파일의 destroy 트리거 부분을 수정했다.
// Callback for file deletion: destroy: function (e, data) { var that = $(this).data('blueimp-fileupload') || $(this).data('fileupload'); if (data.url) { if(data.type=="DELETE") { // IIS에서 DELETE METHOD가 보안강화로 인하여 막혀있음 data.type = "GET"; data.url += "&do=del"; } $.ajax(data); that._adjustMaxNumberOfFiles(1); } that._transition(data.context).done( function () { $(this).remove(); that._trigger('destroyed', e, data); } ); }
서버 Action Class인 server/php/UploadHandler.php도 수정했다.
protected function initialize() { switch ($_SERVER['REQUEST_METHOD']) { case 'OPTIONS': case 'HEAD': $this->head(); break; case 'GET': if(isset($_GET['do']) && $_GET['do']=="del") $this->delete(); else $this->get(); break; case 'PATCH': case 'PUT': case 'POST': $this->post(); break; case 'DELETE': $this->delete(); break; default: $this->header('HTTP/1.1 405 Method Not Allowed'); } }
이제 Method를 GET으로 보내고 문제없이 처리가 된다.
댓글 없음:
댓글 쓰기