에디터에서 Image upload하기
본문
에디터에서 파일 업로드할 때 사용하는 코드입니다. (summernote 와 Toast editor)
<code>
<?php
include "./_common.php";
$isUpload = is_uploaded_file($_FILES['tuieditorFile']['tmp_name']);
// SUCCESSFUL
if($isUpload) {
$ym = date('ym', G5_SERVER_TIME);
$data_dir = G5_DATA_PATH.'/editor/'.$ym;
$data_url = G5_DATA_URL.'/editor/'.$ym;
@mkdir($data_dir, G5_DIR_PERMISSION);
@chmod($data_dir, G5_DIR_PERMISSION);
$tmp_name = $_FILES['tuieditorFile']['tmp_name'];
$name = $_FILES['tuieditorFile']['name'];
$filename_ext = strtolower(array_pop(explode('.',$name)));
$mime_result = ' '.@mime_content_type($tmp_name).@shell_exec('file -bi '. $tmp_name);
// thanks to @dewoweb
if (!preg_match("/(jpe?g|gif|bmp|png)$/i", $filename_ext)) { // check file extension
// error
@unlink($tmp_name);
echo json_encode(array('success' => false, 'error' => 100)); // file type error
} else if ( !stripos($mime_result, 'jpeg') && // check file mime-type
!stripos($mime_result, 'jpg') &&
!stripos($mime_result, 'gif') &&
!stripos($mime_result, 'bmp') &&
!stripos($mime_result, 'png') ) {
@unlink($tmp_name);
echo json_encode(array('success'=> false, 'error' => 101));
} else if (!getimagesize($tmp_name)) { // check image resolution, if resolutions is null, return fail
@unlink($tmp_name);
echo json_encode(array('success'=> false, 'error' => 102));
} else {
$file_name = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR'])).'_'.get_microtime().".".$filename_ext;
$save_dir = sprintf('%s/%s', $data_dir, $file_name);
$save_url = sprintf('%s/%s', $data_url, $file_name);
@move_uploaded_file($tmp_name, $save_dir);
echo json_encode(array('success' => true, 'save_url' => $save_url ));
}
} else {
$error = $_FILES['tuieditorFile']['error'];
// refer to error code : http://www.php.net/manual/en/features.file-upload.errors.php
// example) 1 is error for upload_max_filesize
echo json_encode(array('success'=> false, 'error' => $error));
}
?>
</code>
이쪽이 파일 업로드시 파일 하나씩 처리하게 되어 있는 것 같습니다.
그러다 보니 Javascript에서 ajax로 보낼때.. (summernote editor에서)
<code>
for(var i = 0; i < files.length; i++) {
sendFile(files[i], this);
}
</code>
로 보내게 됩니다.
제가 궁금한점은 위의 PHP코드에서 파일이 하나씩이 아니라 아예 파일 Array로 올라가게 만들수 있느냐입니다. (PHP를 잘 몰라서.. ㅠㅠ)
답변 3
PHP와는 조금 무관한 내용인것같구요
HTML에서 서버로의 파일들을 전송할때
enctype="multipart/form-data" 옵션을 사용하면
파일전송(멀티/배열전달)이 가능합니다.
다만, Ajax로 멀티파일전송이 필요한듯 한데
https://wondongho.tistory.com/96
를 참고해보세요
write_update.php에 보시면 파일이 여러개 들어왔을때 처리하는 구문이 있습니다
보낼때 []를 넣어서 보내고.
data = new FormData();
for (let i = 0, iMax = files.length; i < iMax; i++) {
console.log(files);
data.append("SummernoteFile[]", files[i]);
}
php에서 받을 때에는 []없이 받으면 됩니다.
for ($i = 0; $i < count($_FILES["SummernoteFile"]["name"]); $i++) {
$tmp_name = $_FILES['SummernoteFile']['tmp_name'][$i];
$name = $_FILES['SummernoteFile']['name'][$i];
}