كيف يمكنك تقييد حجم ملف يتم تحميلها مع جافا سكريبت (أو جافا) دون نقل الملف بأكمله؟

StackOverflow https://stackoverflow.com/questions/158149

سؤال

هل هناك طريقة للتحقق من صحة على متصفح العميل ما إذا كان حجم ملف يتم تحميلها من صفحة JSP هو أكثر من مجموعة الحد الأقصى لحجم دون إجبار المستخدم لتحميل الملف بأكمله فقط لمعرفة أنها كانت كبيرة جدا؟

وأود البقاء بعيدا عن أي ضوابط الملكية أو تقنيات مثل فلاش أو اكتف إذا أمكن ذلك.

وشكرا!

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

المحلول

وهذه ليست الحل الأمثل، ولكن إذا قمت بالتدقيق في رأس طول محتوى HTTP مع request.getHeader("Content-Length") ثم يمكنك اختيار عدم نقل الملف بأكمله.

وعلى سبيل التوضيح، لن يتم نقل ملف كبير للغاية في كل مرة. كنت قد فتح فعلا تيار يمثل ذلك جزءا من بعد البيانات وقراءة عليه عن الأمر برمته إلى أن نقلها.

ومن ناحية أخرى، إذا كنت قلقا بشأن هجمات الحرمان من الخدمة، فإنك لا يمكن أن نثق حقا رأس طول محتوى، لأنه يمكن بسهولة مزورة. في هذه الحالة، يجب أن تضع حدا وتيار نقل هذا الملف، ووقف في أقرب وقت كما كنت قد تجاوزت هذا الحد.

نصائح أخرى

وأقترح عليك إعادة النظر في قرار الفلاش ونلقي نظرة على YUI رافع، هنا:

<لأ href = "http://developer.yahoo.com/yui / رافع / "يختلط =" نوفولو noreferrer "> http://developer.yahoo.com/yui/uploader/

ومن بين أمور أخرى، الحدث fileSelect سوف اقول لكم حجم الملف المحدد في بايت مباشرة بعد تحديد ذلك، ولكن قبل أن يتم تحميلها، لذلك عليك أن تكون قادرا على تقييد وفقا لذلك.

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

وهناك بعض الحلول جافا هناك، على سبيل المثال، MyUploader أو <وأ href = "http://javauploader.com / "يختلط =" نوفولو noreferrer "> هيرميس . حتى بعض دعم تحميل الملفات المتعددة واستئناف تحميل الجزئية، وبعض تعطيك أيضا شفرة المصدر. يمكنك أيضا الكتابة الخاصة بك، ولكنها سوف تحتاج إلى أن يكون برنامج صغير وقعت من أجل وظيفة لأنه يحتاج إلى الوصول إلى الملفات المحلية. إذا كنت تستخدم أباتشي كما خادم الويب ستحتاج يكفي RAM في جهازك لتتناسب مع حجم الملف بأكمله في الذاكرة من كل الملفات التي يتم تحميلها في وقت معين.

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