안녕하세요.
CI4로 서버를 구성하여, 공부중인 신입 개발자입니다.
기존 소스를 구성할때는 form sumbit시 해당 변수에 값이 있는지 없는지를 체크하여
알럿을 띄우는 형태로 작업하였습니다.
Ci4에서 Validation.php의 rule을 정의하여 사용하는것이 있어 해당 방법으로 구성을 하고 있습니다.
질문의 요지는 다음과 같습니다.
- 일반 Text로 된 데이터를 Validation check 할때는 response이 바로 오지만, 파일 업로드를 한 후 체크를 하면 1~2초 정도 뒤에 반응이 옵니다.
파일 업로드를 했을때도 반응이 빨리 오는 소스를 구성하고 싶습니다.
// Controllers
public function check(){
$data = $this->request->getPost("data");
$thumb = $this->request->getFile('thumb_file');
// validation check
if (! $this->validate('archiving')) {
$errors = $this->validator->getErrors();
foreach ($errors as $error){
jsonmsg("ERROR", $error);
}
}
}
// Validation
public $archiving = ([
'data.title' => [
'label' => 'data.title',
'rules' => 'required',
'errors' => [
'required' => '제목을 입력해주세요.',
],
],
'data.email' => [
'label' => 'data.email',
'rules' => 'required|valid_email',
'errors' => [
'required' => '이메일을 입력해주세요.',
'valid_email' => '정확한 주소를 입력해주세요.',
],
],
'thumb_file' => [
'label' => 'thumb_file',
'rules' => 'uploaded[thumb_file]|ext_in[thumb_file,png,jpg,jpeg]',
'errors' => [
'uploaded' => '비정상 등록입니다.',
'ext_in' => '등록할 수 없는 이미지 확장자입니다.',
],
]
]);
javascript
let add_ok = () => {
let frm = $("#frm")[0],
frmData = new FormData(frm);
frmData.append("thumb_file", $("#uploadImg_Thumb")[0].files[0]);
$.ajax({
type: "POST",
headers: {'X-Requested-With': 'XMLHttpRequest'},
url: "/core/archiving/check",
processData: false,
contentType: false,
data: frmData,
dataType: "json",
success:function(data) {
if( data.result != "OK" ) {
alert(data.message);
return;
}
location.reload();
},
error:function(r) {
//alert(r.status);
}
});
}
감사합니다.
@테러보이
감사합니다. 고화질의 이미지 파일에서만 나타나는 현상인거 같습니다. 혹시 이런경우에는 어떻게 처리를 하고 계신지 여쭤봐도 될까요?
(테스트 이미지 파일의 용량은 8.4MB)
제가 생각한 방안은
통신 중인경우 loading 화면을 만들어 다른 행동을 할 수 없게 막는것 말고는 잘 모르겠습니다ㅠ
서버 기반 validation은 업로드가 모두 완료된후 진행되기 때문에 업로드되는 파일 사이즈에 따라 응답속도가 느려질 수 있습니다.
javascript로 validation을 미리 진행하세요.
@한대승(불의회상)
답변 감사드립니다.
javascript로 validation 체크 후 유저에게 경고 노출 및 ajax 통신전 return을 시키고,
정상 기입한 내용에 대해서는 보안 관련(XSS) 처리 작업을 하겠습니다.
(서버단에서 validation을 다시 할 필요는 없는 걸까요 ?)