2013년 2월 27일 수요일

jQuery FileUpload DELETE method 변경

파일업로드페이지에서 삭제를 클릭해도 목록에서만 사라질 뿐 실제 이미지가 삭제되지 않는  문제가 있다.

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으로 보내고 문제없이 처리가 된다.

댓글 없음:

댓글 쓰기