기본적으로 파일을 업로드하면 실제 저장되는 파일명이 암호화되어 저장됩니다.
이걸 특정 조건에서는 원본 이름이나, 제가 지정한 이름으로 저장하고 싶은데 방법이 있을까요?
참고로 file 모듈의 insertFile을 사용합니다...
$manul_insert 이게... 그대로 유지하는 건 가 했더니.. 아닌 가 보군요..
기본적으로 파일을 업로드하면 실제 저장되는 파일명이 암호화되어 저장됩니다.
이걸 특정 조건에서는 원본 이름이나, 제가 지정한 이름으로 저장하고 싶은데 방법이 있을까요?
참고로 file 모듈의 insertFile을 사용합니다...
$manul_insert 이게... 그대로 유지하는 건 가 했더니.. 아닌 가 보군요..
아 그래서 파일명이 'need' 이면 그대로 need로 저장하게 하는 정도로 하려구요..ㅎㅎ 그외에는 모두 기존 규칙을 따르게 하구요..!
이러면 크게 보안상 문제가 없겠죠?
답변 정말 감사합니다^^!!
앗 근데 라이믹스 기준으로... 는 어디에 있을까요..ㅠ? xe는 이제...네이버..
혹 시 이 부분 맞나요?
// A workaround for Firefox upload bug if(preg_match('/^=\?UTF-8\?B\?(.+)\?=$/i', $file_info['name'], $match)) { $file_info['name'] = base64_decode(strtr($match[1], ':', '/')); }
아 찾았습니다.
if(preg_match('/^need/',$file_info['name'],$m)) { $_filename = $m[0]. '.' . $ext; } else { $_filename = Rhymix\Framework\Security::getRandom(32, 'hex') . '.' . $ext; }
요로코롬 변경했습니다. 잘되네요...
현재 이렇게 짜여 있습니다. insert_file로 넘기기 전
$fileName = $file["name"]; preg_match('/(.+)(\.jpe?g|png|bmp|gif)$/',$file["name"],$m); if($m[1] && $m[2]) { $file["name"] = 'need'.$m[2]; } $uploadedFile = $oFileController->insertFile($file, $module_info->module_srl, $upload_target_srl, 0, false); $uploadedFileSize = list($width, $height, $type, $attrs) = @getimagesize($uploadedFile->get('uploaded_filename')); list($width, $height, $type, $attrs) = @getimagesize($uploadedFile->get('uploaded_filename')); //이미지 비율이 2:1인지 체크 if(($width / $height) == 2) { debugPrint('이미지가 2:1 비율 맞음'); } else { debugPrint('비율이 2:1이 아님'); $errorMsg = '비율이 2:1이 아님'; //이미지 삭제함 $deleteFile = $oFileController->deleteFile($file_srl); debugPrint('그래서 삭제함'); debugPrint($deleteFile); unset($uploadedFile); }
insert 하기 전에 넘겨줘야 하는 건지 궁금하군요..ㅎㅎ
modules/file/file.controller.php 682줄 전후에서 파일명이 랜덤으로 변경됩니다.
(최근 버전에서는 md5가 아니라 그냥 순수 랜덤으로 합니다.)
여기를 수정하시면 되는데,
원본 파일명에 해킹에 사용될 수 있는 특수문자나 서버 오류를 일으키는 문자가 포함되어 있을 수도 있고,
서버에 따라서는 한글 파일명이 깨지는 경우도 있기 때문에 조심하셔야 해요.
요즘 제대로 세팅된 UTF-8 서버라면 한글 파일명이 깨지는 일은 거의 없겠고... (가끔 IE가 말썽이죠 ㅠ)
파일명에 포함된 위험한 문자를 제거하는 방법은 라이믹스의 FilenameFilter 클래스를 참고해 보세요.