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 에 이렇게 유용한 정보들이 있었군요.
정말로 감사드립니다~~!! 덕분에 소스도 더 보기 깔끔해졌습니다
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;
}
고맙습니다.
약간 제가 원하던 방향과 조금 달라서 추가적으로 글을 남깁니다
저 소스는 Kborad를 사용하지 않고 그냥 순수히 제가 업로드기능을 하기 위해서 여기에 질문했었고 얻었던 답변입니다
제가 저 소스에서 추가적인 경로가 필요한 이유는 csv파일이나 img 파일들을 서버에 저장한 뒤에 DB에 그 경로를 저장하고 나서
제가 원할때마다 DB에서 그 경로를 꺼내와 쓰려고 하는 것입니다.
그래서 경로는 제 임의대로 저장할 수 있지만 업로드 되는 파일의 이름을 $_FILES['업로드파일']['NAME']해서 이름을 가져오는 것은 할 수 있었는데
이게 중복이 될 경우에 문제가 생겨서 말이죠
아니면 제가 몰라서 그러는 것일수도 있는데
$movefile = wp_handle_upload($uploadedfile, array('test_form' => false)); <= 이 부분
$movefile 이 부분이 업로든 된 파일의 정보들을 다 가지고 있는건가요? $movefile['NAME'] 이런 식으로 하면 파일의 이름을 가져온다던가
아니면 $movefile 자체가 업로드경로/업로드 파일.확장자 이런식으로 문자열로 정보를 가지고 있는건가요?
자세히 몰라서 추가질문을 드립니다
안녕하세요.
올려주신 코드에서 $movefile에 중복된 파일명이 있다면
파일명-1 이런 식의 경로를 확인하실 수 있습니다.
해당 변수를 활용해보시겠어요?
KBoard 플러그인에서는 파일 업로드 시 실제 파일명이 아닌
중복되지 않는 고유한 파일명으로 업로드를 하고 있습니다.
FTP로 접속해서 /wp-content/plugins/kboard/class/KBFileHandler.class.php 파일에
getUniqueName 함수를 참고해보시겠어요?
고맙습니다.