에디터에서 Image upload하기

에디터에서 Image upload하기

QA

에디터에서 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;

 

($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

 

를 참고해보세요

올라가는 data가 enctype: 'multipart/form-data', 로 올라간다면 받는 쪽에서도 배열로 받아서 처리해 줘야 될것 같습니다. (위의 코드는 하나씩 받아서 처리하는것 같습니다. 맞나요?)

네 단일건의 샘플입니다.
멀티는 님의 말씀대로 write_update.php에 구문이 있습니다.

제가 샘플찾아드린건, ajax로 multipart 를 넘기는 방식의 예제를 보시라고 찾아드렸습니다.

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];

}

답변을 작성하시기 전에 로그인 해주세요.
전체 123,119 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT