<?php
/**
 * 芋头CMS
 * ============================================================================
 * 版权所有 2016-2028 沅陵县乌托邦网络服务有限公司，并保留所有权利。
 * 网站地址: http://www.yutoucms.cn
 * ----------------------------------------------------------------------------
 * 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
 * ============================================================================
 * Author: 芋头 <mxgsf@qq.com>
 * Date: 2026-5-28
 */


/**
 * 文件上传接口
 * 支持图片/文件上传，用于会员中心的头像、内容图片等
 */

header('Content-Type: application/json;charset=utf-8');

$action = isset($_GET['action']) ? $_GET['action'] : 'upload';

if ($action === 'upload') {
    $type = isset($_POST['type']) ? $_POST['type'] : 'image';
    $file = isset($_FILES['file']) ? $_FILES['file'] : null;

    if (!$file || $file['error'] !== UPLOAD_ERR_OK) {
        $errors = ['UPLOAD_ERR_INI_SIZE' => '文件大小超出服务器限制', 'UPLOAD_ERR_FORM_SIZE' => '文件大小超出表单限制', 'UPLOAD_ERR_PARTIAL' => '文件只上传了一部分', 'UPLOAD_ERR_NO_FILE' => '没有文件被上传', 'UPLOAD_ERR_NO_TMP_DIR' => '缺少临时目录', 'UPLOAD_ERR_CANT_WRITE' => '写入磁盘失败', 'UPLOAD_ERR_EXTENSION' => '文件上传被扩展程序阻止'];
        $msg = $errors[$file['error']] ?? '上传失败';
        echo json_encode(['code' => 400, 'msg' => $msg]);
        exit;
    }

    // 验证文件类型
    $allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp'];
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $file['tmp_name']);
    finfo_close($finfo);

    if (!in_array($mime, $allowedTypes)) {
        echo json_encode(['code' => 400, 'msg' => '不支持的文件类型']);
        exit;
    }

    // 验证文件大小（2MB）
    $maxSize = 2 * 1024 * 1024;
    if ($file['size'] > $maxSize) {
        echo json_encode(['code' => 400, 'msg' => '文件大小不能超过2MB']);
        exit;
    }

    // 创建上传目录
    $uploadDir = dirname(__DIR__) . '/uploads/avatar/' . date('Ym') . '/';
    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0755, true);
    }

    // 生成唯一文件名
    $ext = pathinfo($file['name'], PATHINFO_EXTENSION);
    $newName = uniqid('avatar_') . '.' . $ext;
    $targetPath = $uploadDir . $newName;

    // 移动文件
    if (move_uploaded_file($file['tmp_name'], $targetPath)) {
        $url = '/uploads/avatar/' . date('Ym') . '/' . $newName;
        echo json_encode(['code' => 200, 'msg' => '上传成功', 'url' => $url]);
    } else {
        echo json_encode(['code' => 400, 'msg' => '文件保存失败']);
    }
    exit;
}

echo json_encode(['code' => 400, 'msg' => '未知操作']);
?>