/ / मैं एक एएसपी.NET पृष्ठ अनुरोध से अपलोड की गई फ़ाइल को कैसे हटा सकता हूं और इसकी अखंडता समझौता किए बिना अनुरोध को संभाल सकता हूं? - asp.net, त्रुटि-हैंडलिंग, httprequest, वैश्विक-एएसएक्स, maxrequestlength

मैं एक एएसपी.NET पृष्ठ अनुरोध से अपलोड की गई फ़ाइल को कैसे हटा सकता हूं और इसकी अखंडता समझौता किए बिना अनुरोध को संभाल सकता हूं? - asp.net, त्रुटि-हैंडलिंग, httprequest, वैश्विक-एएसएक्स, maxrequestlength

मान लीजिए कि कोई:

  1. विज़िट और एएसपीएक्स पेज (http अनुरोध प्राप्त करें)।
  2. फ़ाइल अपलोडर में "बहुत बड़ी" फ़ाइल सेट करता है और अपलोड बटन (http पोस्ट अनुरोध) पर क्लिक करता है।

मुझे कोई कस्टम त्रुटि पृष्ठ परवाह नहीं है; वह गूंगा है, और एप्लिकेशन को बाधित करता है।

मैं प्रोग्रामेटिक रूप से त्रुटि को संभालना चाहता हूं। इसे अवरुद्ध किया जा सकता है (पूरे अनुरोध के बाद, मुझे लगता है) global.asax के Application_BeginRequest हैंडलर द्वारा पोस्ट किया गया है यहाँ.

मैं क्या करना चाहता हूं oversized फ़ाइल को हटा देंअनुरोध से, "HttpContext.Current.Items [" filetoolarge "] = true" जैसे किसी प्रकार का ध्वज सेट करें, फिर एक सर्वर करें। उसी पृष्ठ पर ट्रांसफर करें, ताकि अनुरोध चलता है जैसे फ़ाइल कभी नहीं भेजी गई थी , अब सिवाय इसके कि यह त्रुटि ध्वज है कि पृष्ठ निश्चित रूप से जांचने पर एक अच्छा त्रुटि संदेश जांच और प्रदर्शित करेगा।

क्या यह किया जा सकता है?

उत्तर:

जवाब के लिए 0 № 1

एकमात्र तरीका मुझे पता है कि इसका उपयोग किए बिना इसे कैसे किया जाएफ्लैश या एक्टिवएक्स अधिकतम रकम लम्बाई को उच्च मान पर सेट करना है, और फिर फ़ाइल उपलब्ध होने के बाद फ़ाइल के बारे में जानकारी तक पहुंचने के लिए जावास्क्रिप्ट का उपयोग करें, और फिर रद्द / त्रुटि प्रबंधन को संभालें। मैंने इस्तेमाल किया टेलीरिक अपलोड नियंत्रण ऐसा करने के लिए, लेकिन आप कुछ ऐसा करने में सक्षम होना चाहिए।


जवाब के लिए 0 № 2

सेट maxRequestLength आपके में web.config इस तरह के एक बड़े मूल्य के लिए:

<system.web>
<httpRuntime maxRequestLength="26000" executionTimeout="600"/>
</system.web>

तो आप बड़ी फाइल प्राप्त कर सकते हैं। और फिर इसे इस तरह संसाधित करें:

        If fileUploader.PostedFile.ContentLength > theSize Then
"show error"
else
"process it"
End If

आशा करता हूँ की ये काम करेगा।

अद्यतन करें:

maxRequestLength केबी में है

PostedFile.ContentLength बाइट्स में है


जवाब के लिए 0 № 3

मैंने यहां समाधान पोस्ट किया: मैं आईआईएस 7 में अधिकतम आवंटित कॉन्टेंट लम्बाई को कैसे पकड़ूं और संभालूं?

मेरे समाधान में पृष्ठ को ओवरराइड करना शामिल हैऑनरर हैंडलर, और मुझे लगता है कि यह केवल .NET 4.0 में काम करता है, क्योंकि इसमें एचटीपीएक्सप्शन के रूप में अंतिम अपवाद प्राप्त करना और WebEventCode प्रॉपर्टी की जांच करना शामिल है, जो .NET 4.0 ढांचे में नया प्रतीत होता है।

वहां एक और समाधान है जिसमें शामिल हैApplication_EndRequest ग्लोबल एप्लिकेशन हैंडलर को अवरुद्ध करना, जहां स्टेटसकोड और सबस्टैटसकोड दोनों संपत्ति मान उपलब्ध हैं, लेकिन मुझे नहीं लगता कि यह काम करता है, क्योंकि एंड्रॉक्वेस्ट इवेंट उठाए जाने तक प्रतिक्रिया शायद ग्राहक को पहले से ही फ़्लश कर दी गई है।

मेरे अनुभव से, ऑनरर और दोनोंApplication_EndRequest विधियां लगभग तुरंत चलती हैं, सर्वर को संभवतः पूरा अनुरोध प्राप्त हो सकता था, इसलिए संभवतः अनुरोध आकार के बारे में कुछ प्रारंभिक चेतावनी के परिणामस्वरूप इसे निकाल दिया जाता है।

मैंने ऑनरर विधि का परीक्षण किया है, और यह काम करता हैनिर्विवाद रूप से, अपरिहार्य देरी से अलग जहां ब्राउज़र सर्वर के जवाब को संभालने और प्रदर्शित करने से पहले अपने अनुरोध को अपलोड करने पर जोर देता है।

वेब इवेंट कोड पर जानकारी यहां मिल सकती है - http://msdn.microsoft.com/en-us/library/ff650306.aspx