Fix delete file and optimize image style (#25)

pull/25/head^2 v1.4.7
sy-records 2023-12-06 08:19:57 +08:00
parent dd04d774bf
commit 9a9882fd96
No known key found for this signature in database
GPG Key ID: C3BB4FF13CD72ACE
2 changed files with 52 additions and 21 deletions

View File

@ -3,7 +3,7 @@
Plugin Name: OSS Aliyun
Plugin URI: https://github.com/sy-records/aliyun-oss-wordpress
Description: 使用阿里云对象存储 OSS 作为附件存储空间。This is a plugin that uses Aliyun Object Storage Service for attachments remote saving.
Version: 1.4.6
Version: 1.4.7
Author: 沈唁
Author URI: https://qq52o.me
License: Apache2.0
@ -15,12 +15,11 @@ if (!defined('ABSPATH')) {
require_once 'sdk/vendor/autoload.php';
use OSS\OssClient;
use OSS\Core\OssException;
use OSS\Credentials\CredentialsProvider;
use AlibabaCloud\Credentials\Credential;
use OSS\Credentials\StaticCredentialsProvider;
define('OSS_VERSION', '1.4.6');
define('OSS_VERSION', '1.4.7');
define('OSS_BASEFOLDER', plugin_basename(dirname(__FILE__)));
if (!function_exists('get_home_path')) {
@ -123,9 +122,9 @@ function oss_file_upload($object, $file, $no_local_file = false)
}
$bucket = oss_get_bucket_name();
$ossClient = oss_get_client();
try{
try {
$ossClient->uploadFile($bucket, ltrim($object, '/'), $file);
} catch (OssException $e) {
} catch (Throwable $e) {
if (WP_DEBUG) {
echo 'Error Message: ', $e->getMessage(), PHP_EOL, 'Error Code: ', $e->getCode();
}
@ -195,10 +194,15 @@ function oss_delete_oss_file($file)
*/
function oss_delete_oss_files(array $files)
{
$deleteObjects = [];
foreach ($files as $file) {
$deleteObjects[] = str_replace(["\\", './'], ['/', ''], $file);
}
try {
$bucket = oss_get_bucket_name();
$ossClient = oss_get_client();
$ossClient->deleteObjects($bucket, $files);
$ossClient->deleteObjects($bucket, $deleteObjects);
} catch (\Throwable $e) {
if (WP_DEBUG) {
echo 'Error Message: ', $e->getMessage(), PHP_EOL, 'Error Code: ', $e->getCode();
@ -346,30 +350,29 @@ function oss_delete_remote_attachment($post_id)
{
// 获取图片类附件的meta信息
$meta = wp_get_attachment_metadata($post_id);
$upload_path = oss_get_option('upload_path');
if ($upload_path == '') {
$upload_path = 'wp-content/uploads';
}
if (!empty($meta['file'])) {
$deleteObjects = [];
// meta['file']的格式为 "2020/01/wp-bg.png"
$upload_path = oss_get_option('upload_path');
if ($upload_path == '') {
$upload_path = 'wp-content/uploads';
}
$file_path = $upload_path . '/' . $meta['file'];
$deleteObjects[] = str_replace("\\", '/', $file_path);
$dirname = dirname($file_path) . '/';
$deleteObjects[] = $file_path;
// 超大图原图
if (!empty($meta['original_image'])) {
$deleteObjects[] = ['Key' => str_replace("\\", '/', $dirname . $meta['original_image'])];
$deleteObjects[] = $dirname . $meta['original_image'];
}
// 删除缩略图
if (!empty($meta['sizes'])) {
foreach ($meta['sizes'] as $val) {
$deleteObjects[] = str_replace("\\", '/', $dirname . $val['file']);
$deleteObjects[] = $dirname . $val['file'];
}
}
@ -378,7 +381,6 @@ function oss_delete_remote_attachment($post_id)
// 获取链接删除
$link = wp_get_attachment_url($post_id);
if ($link) {
$upload_path = oss_get_option('upload_path');
if ($upload_path != '.') {
$file_info = explode($upload_path, $link);
if (count($file_info) >= 2) {
@ -472,17 +474,39 @@ function oss_plugin_action_links($links, $file)
}
add_filter('plugin_action_links', 'oss_plugin_action_links', 10, 2);
function oss_custom_image_srcset($sources, $size_array, $image_src, $image_meta, $attachment_id)
{
$option = get_option('oss_options');
$style = !empty($option['style']) ? esc_attr($option['style']) : '';
$upload_url_path = esc_attr($option['upload_url_path']);
if (empty($style)) {
return $sources;
}
foreach ($sources as $index => $source) {
if (strpos($source['url'], $upload_url_path) !== false && strpos($source['url'], $style) === false) {
$sources[$index]['url'] .= $style;
}
}
return $sources;
}
add_filter('wp_calculate_image_srcset', 'oss_custom_image_srcset', 10, 5);
add_filter('the_content', 'oss_setting_content_style');
function oss_setting_content_style($content)
{
$option = get_option('oss_options');
$upload_url_path = esc_attr($option['upload_url_path']);
if (!empty($option['style'])) {
$style = esc_attr($option['style']);
preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $content, $images);
if (!empty($images) && isset($images[1])) {
$images[1] = array_unique($images[1]);
foreach ($images[1] as $item) {
if((strpos($item, esc_attr($option['upload_url_path'])) !== false) && (strpos($item, esc_attr($option['style'])) === false)){
$content = str_replace($item, $item . esc_attr($option['style']), $content);
if (strpos($item, $upload_url_path) !== false && strpos($item, $style) === false) {
$content = str_replace($item, $item . $style, $content);
}
}
}
@ -494,13 +518,15 @@ add_filter('post_thumbnail_html', 'oss_setting_post_thumbnail_style', 10, 3);
function oss_setting_post_thumbnail_style($html, $post_id, $post_image_id)
{
$option = get_option('oss_options');
$upload_url_path = esc_attr($option['upload_url_path']);
if (!empty($option['style']) && has_post_thumbnail()) {
$style = esc_attr($option['style']);
preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $html, $images);
if (!empty($images) && isset($images[1])) {
$images[1] = array_unique($images[1]);
foreach ($images[1] as $item) {
if((strpos($item, esc_attr($option['upload_url_path'])) !== false) && (strpos($item, esc_attr($option['style'])) === false)){
$html = str_replace($item, $item . esc_attr($option['style']), $html);
if (strpos($item, $upload_url_path) !== false && strpos($item, $style) === false) {
$html = str_replace($item, $item . $style, $html);
}
}
}

View File

@ -5,7 +5,7 @@ Tags: oss, 阿里云, 对象存储, aliyun
Requires at least: 4.2
Tested up to: 6.4
Requires PHP: 7.0
Stable tag: 1.4.6
Stable tag: 1.4.7
License: Apache2.0
License URI: http://www.apache.org/licenses/LICENSE-2.0.html
@ -73,6 +73,11 @@ License URI: http://www.apache.org/licenses/LICENSE-2.0.html
== Changelog ==
= 1.4.7 =
- 修复 `upload_url_path` 设置为 `.` 时删除失败
- 优化图片处理参数追加
= 1.4.6 =
- 修复 pdf 等文件格式上传时报错