aliyun-oss-wordpress/oss-commands.php

124 lines
2.9 KiB
PHP
Raw Permalink Normal View History

<?php
if (!class_exists('WP_CLI')) {
return;
}
class OSS_CLI_Commands
{
/**
* 同步文件夹到 OSS
*
* ## OPTIONS
*
* <path>
* : 要同步的文件夹
*
* ## EXAMPLES
*
* wp oss upload wp-content/uploads
*
* @when after_wp_load
*/
public function upload($args, $assoc_args)
{
[$path] = $args;
$dir = ABSPATH . $path;
if (!is_dir($dir)) {
WP_CLI::error("Directory not found: [{$dir}]");
}
WP_CLI::line("Uploading files from [{$dir}] to OSS...");
$files = oss_read_dir_queue(ABSPATH, $path);
if (empty($files)) {
WP_CLI::success('No files to upload.');
return;
}
foreach ($files as $file) {
$status = oss_file_upload($file['key'], $file['filepath']);
if ($status) {
WP_CLI::line("Uploaded: {$file['key']}");
} else {
WP_CLI::line("Failed: {$file['key']}");
}
}
$total = count($files);
WP_CLI::success("Uploaded {$total} files.");
}
/**
* 同步文件到 OSS
*
* ## OPTIONS
*
* <path>
* : 要同步的文件
*
* [--delete]
* : 如果设置,上传后会删除本地文件
* [--key=<key>]
* : 指定上传到 OSS key默认和文件路径一致
*
* ## EXAMPLES
*
* wp oss upload-file wp-content/uploads/2021/01/1.jpg
* wp oss upload-file wp-content/uploads/2021/01/1.jpg --delete
* wp oss upload-file wp-content/uploads/2021/01/1.jpg --key=2021/01/1.jpg
*
* @when after_wp_load
* @subcommand upload-file
*/
public function upload_file($args, $assoc_args)
{
[$path] = $args;
$file = ABSPATH . $path;
if (!is_file($file)) {
WP_CLI::error("File not found: {$file}");
}
$delete = false;
if (isset($assoc_args['delete'])) {
$delete = true;
}
$key = isset($assoc_args['key']) ? $assoc_args['key'] : $path;
WP_CLI::line("Uploading file [{$file}] to OSS with key [$key]...");
$status = oss_file_upload("/{$key}", $file, $delete);
if ($status) {
WP_CLI::success("Uploaded: {$path}");
} else {
WP_CLI::error("Failed: {$path}");
}
}
/**
* 删除 OSS 中的文件
*
* ## OPTIONS
*
* <key>
* : 需要删除 OSS 中的文件 key
*
* ## EXAMPLES
*
* wp oss delete-file 2021/01/1.jpg
*
* @when after_wp_load
* @subcommand delete-file
*/
public function delete_file($args, $assoc_args)
{
[$key] = $args;
WP_CLI::line("Deleting file [{$key}] from OSS...");
oss_delete_oss_file($key);
}
}
WP_CLI::add_command('oss', 'OSS_CLI_Commands', ['shortdesc' => 'Commands used to operate OSS.']);