Update Saqel Platform: 2026-09-02 08:20:41
This commit is contained in:
@@ -506,7 +506,13 @@ class CurriculumStudio
|
|||||||
const raw = await res.text();
|
const raw = await res.text();
|
||||||
let data;
|
let data;
|
||||||
try { data = JSON.parse(raw); }
|
try { data = JSON.parse(raw); }
|
||||||
catch (_) { throw new Error(`HTTP ${res.status}: ${raw.slice(0, 240) || 'استجابة غير مفهومة من السيرفر'}`); }
|
catch (_) {
|
||||||
|
const plain = raw.replace(/<[^>]*>/g, ' ').replace(/\s+/g, ' ').trim();
|
||||||
|
if (res.status === 413) {
|
||||||
|
throw new Error('حجم الفيديو أكبر من الحد المسموح في Nginx. ارفع client_max_body_size إلى 512M أو أكثر.');
|
||||||
|
}
|
||||||
|
throw new Error(`HTTP ${res.status}: ${plain.slice(0, 240) || 'استجابة غير مفهومة من السيرفر'}`);
|
||||||
|
}
|
||||||
if (res.ok && data.status === 'processing') {
|
if (res.ok && data.status === 'processing') {
|
||||||
currentUploadTaskId = data.task_id;
|
currentUploadTaskId = data.task_id;
|
||||||
statusSpan.textContent = data.message || '⏳ تم استلام الفيديو، جاري تحويله ورفعه إلى Cloudflare...';
|
statusSpan.textContent = data.message || '⏳ تم استلام الفيديو، جاري تحويله ورفعه إلى Cloudflare...';
|
||||||
|
|||||||
@@ -44,3 +44,5 @@
|
|||||||
مجلدات R2 القديمة مثل `hls/0` و`hls/1` و`hls/4` ليست فهرس الدروس؛ المرجع المعتمد هو قاعدة البيانات و`curriculum_key`، لذلك لا تُحذف قبل ترحيلها والتحقق من كل درس.
|
مجلدات R2 القديمة مثل `hls/0` و`hls/1` و`hls/4` ليست فهرس الدروس؛ المرجع المعتمد هو قاعدة البيانات و`curriculum_key`، لذلك لا تُحذف قبل ترحيلها والتحقق من كل درس.
|
||||||
|
|
||||||
بعد نشر الكود يجب أن يكون عامل PHP قادرًا على الكتابة إلى `backend/storage/curriculum/processing` و`backend/storage/videos` و`backend/storage/hls`، وأن يكون FFmpeg مثبتًا على الخادم. وللفيديوهات الكبيرة يجب ضبط `upload_max_filesize` و`post_max_size` في PHP و`client_max_body_size` في Nginx بما يتجاوز حجم أكبر فيديو.
|
بعد نشر الكود يجب أن يكون عامل PHP قادرًا على الكتابة إلى `backend/storage/curriculum/processing` و`backend/storage/videos` و`backend/storage/hls`، وأن يكون FFmpeg مثبتًا على الخادم. وللفيديوهات الكبيرة يجب ضبط `upload_max_filesize` و`post_max_size` في PHP و`client_max_body_size` في Nginx بما يتجاوز حجم أكبر فيديو.
|
||||||
|
|
||||||
|
إذا ظهر `HTTP 413 Request Entity Too Large` فهذا يعني أن Nginx رفض الملف قبل وصوله إلى PHP. في CloudPanel ارفع `client_max_body_size` إلى `512M` أو أكثر، وارفع `upload_max_filesize` و`post_max_size` في إعدادات PHP-FPM، ثم أعد تشغيل/Reload خدمة Nginx وPHP-FPM. لا تعالج 413 من كود التطبيق لأنه يحدث قبل تشغيل الـ API.
|
||||||
|
|||||||
Reference in New Issue
Block a user