进行了一些小修复

This commit is contained in:
2026-08-26 23:18:51 +08:00
parent af3539914d
commit fff1590a43
5 changed files with 61 additions and 15 deletions
+37 -10
View File
@@ -81,30 +81,57 @@ class FrontSubmit {
return $this->user_can_cap($cap, $user_id);
}
public static function upload_limit_bytes(string $kind): int {
$settings = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_all() : [];
$configured_mb = match ($kind) {
'image' => max(1, min(20, (int) ($settings['submit_image_max_size'] ?? 5))),
'video' => max(1, min(200, (int) ($settings['submit_video_max_size'] ?? 30))),
'resource' => max(1, min(200, (int) ($settings['resource_max_size'] ?? 50))),
default => 0,
};
if ($configured_mb === 0) {
return 0;
}
return min($configured_mb * MB_IN_BYTES, (int) wp_max_upload_size());
}
public function rest_upload_attachment(\WP_REST_Request $request) {
$kind = (string) $request->get_param('kind');
$user_id = get_current_user_id();
$files = $request->get_file_params();
$file = $files['file'] ?? null;
if (!is_array($file) || empty($file['tmp_name']) || !empty($file['error'])) {
if (!is_array($file)) {
return new \WP_Error('aksrt_upload_missing_file', __('请选择要上传的文件。', 'aksrt'), ['status' => 400]);
}
$settings = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_all() : [];
$max_mb = match ($kind) {
'resource' => max(1, min(200, (int) ($settings['resource_max_size'] ?? 50))),
'video' => max(1, min(200, (int) ($settings['submit_video_max_size'] ?? 30))),
default => max(1, min(20, (int) ($settings['submit_image_max_size'] ?? 5))),
};
$max_size = $max_mb * MB_IN_BYTES;
$max_size = self::upload_limit_bytes($kind);
$upload_error = (int) ($file['error'] ?? UPLOAD_ERR_NO_FILE);
if ($upload_error === UPLOAD_ERR_INI_SIZE || $upload_error === UPLOAD_ERR_FORM_SIZE) {
return new \WP_Error(
'aksrt_upload_too_large',
sprintf(__('文件大小不能超过 %s。', 'aksrt'), size_format($max_size)),
['status' => 413]
);
}
if ($upload_error === UPLOAD_ERR_PARTIAL) {
return new \WP_Error('aksrt_upload_partial', __('文件未完整上传,请重新选择。', 'aksrt'), ['status' => 400]);
}
if ($upload_error === UPLOAD_ERR_NO_FILE || empty($file['tmp_name'])) {
return new \WP_Error('aksrt_upload_missing_file', __('请选择要上传的文件。', 'aksrt'), ['status' => 400]);
}
if ($upload_error !== UPLOAD_ERR_OK) {
return new \WP_Error('aksrt_upload_failed', __('服务器无法保存上传文件。', 'aksrt'), ['status' => 500]);
}
$size = (int) ($file['size'] ?? 0);
if ($size <= 0 || $size > $max_size) {
return new \WP_Error(
'aksrt_upload_too_large',
sprintf(__('文件大小不能超过 %dMB。', 'aksrt'), $max_mb),
['status' => 400]
sprintf(__('文件大小不能超过 %s。', 'aksrt'), size_format($max_size)),
['status' => 413]
);
}