솔그루

그누보드5 업로드 파일 관리 - 관리자

스크린샷 2026-01-15 오후 3.16.09.png
스크린샷 2026-01-15 오후 4.16.17.png

관리자 업로드 파일 관리

그누보드5 관리자 페이지에서 게시판 첨부파일을 통합 관리하는 기능입니다. 이미지와 pdf 파일은 미리보기를 지원합니다.
기존 업로드된 g5_board_files 테이블 데이타와 업로드 파일을  쉽게 관리할수 있습니다.
등록 / 수정 / 삭제 / 순서 변경 등의 기능을 시각적 UI 를 통해서 쉽게 제어할수 있습니다. 

개요

항목 내용
메뉴 위치 관리자 > 회원관리 > 업로드파일관리
메뉴 코드 300810
관련 파일 adm/board_file_list.php, adm/board_file_ajax.php, adm/board_file_delete.php

주요 기능

1. 게시물 단위 파일 그룹화

파일 목록을 게시물(bo_table + wr_id) 기준으로 그룹화하여 표시합니다.

  • 게시판명, 게시글 제목을 rowspan으로 묶어 표시
  • 게시글당 파일 개수 표시
  • 게시글 원본 링크 제공
┌─────────┬─────────────┬──────────────┬────────┐
│ 게시판  │ 게시글 제목  │ 파일정보     │ 관리   │
├─────────┼─────────────┼──────────────┼────────┤
│ 자유    │ #123 테스트  │ image1.jpg   │ 관리   │
│ 게시판  │ 3개 파일     ├──────────────┼────────┤
│         │             │ image2.png   │ 관리   │
│         │             ├──────────────┼────────┤
│         │             │ doc.pdf      │ 관리   │
├─────────┼─────────────┼──────────────┼────────┤
│ 공지    │ #45 공지사항 │ notice.pdf   │ 관리   │
│ 사항    │ 1개 파일     │              │        │
└─────────┴─────────────┴──────────────┴────────┘

2. 검색 및 필터

필터 설명
게시판 특정 게시판의 파일만 조회
파일명 원본 파일명으로 검색
업로드일 날짜 범위 지정 (프리셋: 오늘, 7일, 30일, 3개월)

3. 파일 관리 모달

file-uploader 웹 컴포넌트를 활용한 통합 파일 관리 UI입니다.

지원 기능

  • 파일 추가: 드래그 앤 드롭 또는 클릭으로 새 파일 추가
  • 파일 삭제: 파일 위 X 버튼으로 삭제
  • 순서 변경: 드래그로 파일 순서 변경
  • 미리보기: 이미지/PDF 클릭 시 전체 화면 미리보기

사용 방법

  1. 파일 목록에서 "관리" 버튼 클릭
  2. 모달에서 파일 추가/삭제/순서변경
  3. "저장" 버튼으로 변경사항 적용

4. 파일 추가 (독립 기능)

목록 상단의 "파일 추가" 버튼으로 특정 게시글에 파일을 직접 추가할 수 있습니다.

  1. 게시판 선택
  2. 게시글 선택 (AJAX로 목록 로드)
  3. 파일 선택
  4. 업로드

5. 일괄 삭제

체크박스로 여러 파일을 선택하여 일괄 삭제할 수 있습니다.


기술 구현

파일 구조

adm/
├── board_file_list.php      # 목록 페이지 (메인 UI)
├── board_file_ajax.php      # AJAX 핸들러
├── board_file_delete.php    # 일괄 삭제 처리
└── js/
    └── file-uploader.js     # 파일 업로더 웹 컴포넌트

AJAX API

get_write_files - 게시물 파일 목록 조회

// Request
{
    action: 'get_write_files',
    bo_table: 'free',
    wr_id: 123
}

// Response
{
    success: true,
    data: {
        bo_table: 'free',
        bo_subject: '자유게시판',
        wr_id: 123,
        wr_subject: '테스트 글',
        files: [
            { id: 'free_123_0', name: 'image.jpg', url: '...', size: 50000, type: 'image/jpeg' },
            { id: 'free_123_1', name: 'doc.pdf', url: '...', size: 120000, type: 'application/pdf' }
        ]
    }
}

update_write_files - 파일 변경사항 저장

변경사항이 있으면 모든 파일을 blob/File로 전달받아 기존 파일 삭제 후 재등록합니다.

// Request (FormData)
{
    action: 'update_write_files',
    bo_table: 'free',
    wr_id: 123,
    is_changed: 'true',
    'all_files[0]': (blob),
    'all_files[1]': (blob),
    ...
}

// Response
{
    success: true,
    message: '변경사항이 저장되었습니다.'
}

처리 흐름:

  1. 기존 물리 파일 및 썸네일 삭제
  2. DB 레코드 전체 삭제
  3. 전달받은 파일을 순서대로 새로 등록
  4. wr_file 카운트 업데이트

get_writes - 게시글 목록 조회

파일 추가 시 게시글 선택용 목록을 가져옵니다.

// Request
{
    action: 'get_writes',
    bo_table: 'free'
}

// Response
{
    success: true,
    data: [
        { wr_id: 123, wr_subject: '테스트 글' },
        { wr_id: 122, wr_subject: '다른 글' }
    ]
}

add - 새 파일 추가

// Request (FormData)
{
    action: 'add',
    bo_table: 'free',
    wr_id: 123,
    'files[0]': (file),
    'files[1]': (file)
}

delete - 단건 파일 삭제

// Request
{
    action: 'delete',
    bo_table: 'free',
    wr_id: 123,
    bf_no: 0
}

file-uploader 웹 컴포넌트

주요 메서드

메서드 반환값 설명
loadFiles(files) void 기존 파일 로드
getFiles() File[] 선택된 File 객체 배열
getNewFiles() File[] 새로 추가된 파일만
getDeletedFileIds() string[] 삭제된 파일 ID 배열
getExistingFileIds() string[] 유지되는 기존 파일 ID (순서대로)
getAllFilesForUpload() Promise<{data, name, type}[]> 모든 파일을 업로드 가능 형태로 반환
clearFiles() void 파일 목록 초기화
clearDeletedFileIds() void 삭제 목록 초기화

파일 로드 형식

uploader.loadFiles([
    {
        id: 'free_123_0',      // 고유 식별자
        name: 'image.jpg',      // 원본 파일명
        url: '/data/file/...',  // 파일 URL
        size: 50000,            // 파일 크기 (bytes)
        type: 'image/jpeg'      // MIME 타입
    }
]);

MIME 타입 처리

확장자 MIME 타입 미리보기
jpg, jpeg, gif, png, webp, bmp, svg image/* 이미지 뷰어
pdf application/pdf PDF.js 뷰어
기타 application/octet-stream 미리보기 없음

UI 스타일

디자인 시스템

그누보드5 관리자 UI 패턴을 따르며, 추가로 다음 스타일이 적용됩니다:

요소 클래스 색상
Primary 버튼 .btn_01 #ff4081 (Pink)
Secondary 버튼 .btn_02 #6c757d (Gray)
Tertiary 버튼 .btn_03 #3f51b5 (Indigo)
검색 버튼 .btn_submit #ff4081
그룹 강조 .td_group 좌측 3px Indigo 보더

로딩 인디케이터

파일 저장 시 스피너 애니메이션으로 처리 중 상태를 표시합니다.

.loading_spinner {
    width: 40px; height: 40px;
    border: 4px solid #e9ecef;
    border-top-color: #ff4081;
    animation: spin 0.8s linear infinite;
}

권한 처리

권한 설명
최고관리자 모든 게시판 파일 관리 가능
그룹관리자 자신이 관리하는 그룹의 게시판만 접근
// 그룹 관리자 권한 확인
if ($is_admin != 'super') {
    $sql_check = "SELECT COUNT(*) as cnt FROM {$g5['board_table']} a
                  LEFT JOIN {$g5['group_table']} b ON a.gr_id = b.gr_id
                  WHERE a.bo_table = '{$bo_table}' AND b.gr_admin = '{$member['mb_id']}'";
}

보안 고려사항

항목 처리 방법
SQL Injection sql_escape_string(), (int) 캐스팅
경로 조작 str_replace('../', '', $bf_file)
권한 검사 auth_check_menu(), 그룹 관리자 제한
파일 확장자 설정의 cf_image_extension 참조

버전 정보

테스트한 버전 5.6.23
호환 가능 버전 5.4 이상

첨부파일

gnuboard5-file-manager-1.0.0-20260115.zip (785 KB) 1회 2026-01-15 16:14 포인트 차감 500
1명이 반응했습니다
|

댓글 1개

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기
+
🐛 버그신고