进行了一些小修复
This commit is contained in:
+37
-10
@@ -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]
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user