سؤال

في إطار اللعب، هل من الممكن رفض الملعب

filledForm.reject("myField", "You are missing files");
return badRequest(myform.render(filledForm));

دون إعادة تحميل الصفحة؟

لدي حقل إدخال ملف يتيح للمستخدمين تحديد الملفات.عند الرفض وإعادة التحميل، يتم مسح الملفات ويتم عرض الخطأ.أريد أن تكون الملفات التي اختاروها هناك

السلوك الحالي:قبل تقديم النموذج:

Before

بعد الإرسال (مع الخطأ:لقد اختفت الملفات)

Before

هل كانت مفيدة؟

المحلول

حدد ملف حقول الإدخال (على سبيل المثال. <input type="file" ... />) تختلف عن حقول الإدخال الأخرى - لا يمكنك تعبئة القيمة مسبقًا من جانب الخادم.ستكون ثغرة أمنية هائلة إذا استطعت (فكر في <input type="file" value="/etc/passwd" .. />).على الخادم، عندما تحصل على النموذج المقدم، لا تحصل على المسار الكامل للملف الذي تم تحميله، فقط اسم الملف ومحتوياته.

إذا كنت تريد حقًا الحفاظ على قيمة حقل إدخال الملف الخاص بك، فستحتاج إلى اتباع مسار مختلف:أرسل النموذج عبر Ajax (جوجل لـ "تحميل ملف ajax" لبعض التقنيات والمكتبات للمساعدة في ذلك)، واستخدم استجابة Ajax للإشارة إلى ما إذا كان الملف صالحًا أم لا.


مزيد من التوضيح:باستخدام طريقة نشر HTML/HTTP العادية (التي يستخدمها مساعدو نماذج التشغيل)، تختفي الصفحة الأصلية، وتكون استجابة الخادم عبارة عن صفحة جديدة بدون اتصال بالصفحة السابقة.سيقوم مساعدو نماذج التشغيل بملء حقول الإدخال في هذه الصفحة مسبقًا بالقيم السابقة، ولكن كما هو موضح أعلاه، فإن هذا غير ممكن لحقل إدخال الملف.

ولهذا السبب توجد مكتبات جافا سكريبت ذات أغراض خاصة لتحميل الملفات.إذا كان النموذج الخاص بك معنيًا في المقام الأول بتحميل الملفات، فيجب عليك إلقاء نظرة على هذه الأمور.(على سبيل المثال http://finuploader.com).على جانب الخادم، سيكون هدف استعلام Ajax هو إجراء جديد يقوم فقط بمعالجة الملفات التي تم تحميلها وإرجاع رسالة نجاح/فشل، والتي ستعرضها بعد ذلك للمستخدم.

نصائح أخرى

إذا كان الخادم قادر على معالجة قيمة حقل الملفات، فسيكون ذلك مخاطرة أمنية رئيسية حيث يمكننا أخذ أي ملف من القرص الصلب المستخدم.إذا نظرنا إلى المتطلبتين لديك،

  • احصل على محتويات الملف على الخادم
  • لا تزعج ولاية العميل UI

    الخيار الوحيد هو استخدام تحميل ملف Ajax.لذلك يصبح تدفقك الآن:

    • إرسال الملف عبر تحميل Ajax
    • التحقق من صحة المحتويات
    • احفظ الملف لاسترجاع لاحقا
    • أرسل مرة أخرى الحالة (موافق أو خطأ)
    • عرض الخطأ عند الخطأ
    • بعد تقديم النموذج بأكمله، ابحث عن الملف المحفوظ مسبقا

      يمكنك الغش قليلا إذا كنت لا تمانع في الحمل - قم فقط بالتحقق من الصحة مع AJAX لعرض رسالة الخطأ ودع الملف يتم تحميل الملف مرة أخرى على إرسال عادي.

      كل شيء حول العمل مع الحدود لدينا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top