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으로 보내고 문제없이 처리가 된다.
댓글 없음:
댓글 쓰기