파일 첨부에 관련되서 문의드립니다

function set_file() {
	$current_user = wp_get_current_user();
	$user_login = $current_user->user_login;
	$test_code = $_POST['code'];
	global $wpdb;

	if(!function_exists('wp_handle_upload')){
		require_once(ABSPATH . 'wp-admin/includes/file.php');
	}

	$uploadedfile = $_FILES['set_test_upfile'];
	$movefile = wp_handle_upload($uploadedfile, array('test_form' => false));
	
	if($movefile && ! isset($movefile['error'])){

	}
	else{
		echo $movefile['error'];
	}
}

현재 제가 사용하고 있는 소스입니다. 그런데 여기서 질문이 하나 있는데 바로 파일명의 관련된 질문입니다

DB에 경로+파일명을 저장하고 있는데 이 때 파일명을 사용하는 변수가 $_FILES['set_test_upfile']['name']; 입니다

그런데 똑같은 이름의 파일이 wordpress 에 업로드 될때는 뒤에 파일명-1, 파일명-2 이런식으로 뒤에 붙더군요

그래서 똑같은 이름의 파일을 업로드하면 전에 업로드 했던 파일명을 가지고 옵니다

이걸 해결하는 방법이 업로드 한 뒤의 파일명을 읽는 방법인것 같은데 못 찾아서 여기에다가 질문글 남깁니다

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요.

    올려주신 코드에서 $movefile에 중복된 파일명이 있다면

    파일명-1 이런 식의 경로를 확인하실 수 있습니다.

    해당 변수를 활용해보시겠어요?

     

    KBoard 플러그인에서는 파일 업로드 시 실제 파일명이 아닌

    중복되지 않는 고유한 파일명으로 업로드를 하고 있습니다.

    FTP로 접속해서 /wp-content/plugins/kboard/class/KBFileHandler.class.php 파일에

    getUniqueName 함수를 참고해보시겠어요?

    고맙습니다.

  • 약간 제가 원하던 방향과 조금 달라서 추가적으로 글을 남깁니다

    저 소스는 Kborad를 사용하지 않고 그냥 순수히 제가 업로드기능을 하기 위해서 여기에 질문했었고 얻었던 답변입니다

    제가 저 소스에서 추가적인 경로가 필요한 이유는 csv파일이나 img 파일들을 서버에 저장한 뒤에 DB에 그 경로를 저장하고 나서

    제가 원할때마다 DB에서 그 경로를 꺼내와 쓰려고 하는 것입니다.

    그래서 경로는 제 임의대로 저장할 수 있지만 업로드 되는 파일의 이름을 $_FILES['업로드파일']['NAME']해서 이름을 가져오는 것은 할 수 있었는데

    이게 중복이 될 경우에 문제가 생겨서 말이죠

    아니면 제가 몰라서 그러는 것일수도 있는데

    $movefile = wp_handle_upload($uploadedfile, array('test_form' => false)); <= 이 부분

    $movefile 이 부분이 업로든 된 파일의 정보들을 다 가지고 있는건가요? $movefile['NAME'] 이런 식으로 하면 파일의 이름을 가져온다던가

    아니면 $movefile 자체가 업로드경로/업로드 파일.확장자 이런식으로 문자열로 정보를 가지고 있는건가요?

    자세히 몰라서 추가질문을 드립니다

  • KBoard 플러그인에서 파일 업로드 함수가 도움이 될까 안내해드렸습니다.

    $movefile 변수에는 업로드 디렉토리 경로, url, 확장자 정보가 저장됩니다.

    아래의 링크를 참고해보세요.

    https://codex.wordpress.org/Function_Reference/wp_handle_upload

     

    이전에 안내해드린 코드 대신 아래의 코드들로 적용하신 후에 실제 파일 업로드를 하시면

    크롬의 개발자 도구(F12)의 콘솔(console) 창에서 실제 값을 확인하실 수 있습니다.

    <input type="file" id="upfile1" name="upfile1" accept="image/*"/>
    <script>
    jQuery(document).ready(function() {
        jQuery('#upfile1').on('change', function(e){
            e.preventDefault;
    
            var formData = new FormData();
            var files_data = jQuery('#upfile1');
    
    		formData.append('upfile1', jQuery(files_data)[0].files[0]);
            formData.append('action', 'set_excel');  
    
            jQuery.ajax({
                type: 'POST',
                url: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
                data: formData,
                contentType: false,
                processData: false,
                success: function(response){
    				console.log(response);
                }
            });
        });
    });
    </script>

    아래의 코드는 테마 쪽 functions.php 파일 쪽에 추가하는 코드입니다.

    add_action('wp_ajax_set_excel', 'set_excel');
    add_action('wp_ajax_nopriv_set_excel', 'set_excel');
    function set_excel(){
    	if(!function_exists('wp_handle_upload')){
    		require_once(ABSPATH . 'wp-admin/includes/file.php');
    	}
    	
    	$uploadedfile = $_FILES['upfile1'];
    	
    	$movefile = wp_handle_upload($uploadedfile, array('test_form' => false));
    	
    	print_r($movefile); exit;
    	
    	if($movefile && ! isset($movefile['error'])){
    		echo "업로드 되었습니다.";
    	}
    	else{
    		echo $movefile['error'];
    	}
    	exit;
    }

    고맙습니다.

  • $movefile 에 이렇게 유용한 정보들이 있었군요.

    정말로 감사드립니다~~!! 덕분에 소스도 더 보기 깔끔해졌습니다

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요