12

एप्लिकेशन ऑनरर में त्रुटि रिकॉर्ड करने में सक्षम है, लेकिन हम उपयोगकर्ता को कुछ सार्थक दिखाने के लिए कोई रीडायरेक्ट या ऐसा करने में सक्षम नहीं हैं। कोई विचार? मुझे पता है कि हम web.config में maxRequestLength सेट कर सकते हैं, लेकिन फिर भी उपयोगकर्ता इस सीमा से अधिक हो सकता है और कुछ सामान्य त्रुटि को प्रदर्शित करने की आवश्यकता है।एएसपी.नेट - बड़ी फ़ाइल अपलोड करते समय त्रुटि पृष्ठ कैसे दिखाना है (अधिकतम अनुरोध लंबाई पार हो गई है)?

उत्तर

6

जैसा कि आप कहते हैं कि आप अपने web.config में maxRequestLength (अपने machine.config के डिफ़ॉल्ट 4 एमबी ओवरराइडिंग) को सेट कर सकते हैं और यदि यह सीमा पार हो जाती है तो आपको आमतौर पर HTTP 401.1 त्रुटि मिलती है।

आदेश आवेदन स्तर पर एक सामान्य HTTP त्रुटि को संभालने के लिए में आप सेटअप system.web अनुभाग के भीतर अपने web.config में एक CustomError अनुभाग कर सकते हैं:

<system.web> 
    <customErrors mode=On defaultRedirect=yourCustomErrorPage.aspx /> 
</system.web> 

हर त्रुटि से पता चला है उपयोगकर्ता पुनः निर्देशित किया जाएगा आपके कस्टम त्रुटि पृष्ठ पर।

आप प्रत्येक त्रुटि आप की तरह कुछ कर सकते हैं के लिए एक विशेष पेज चाहते हैं:

<system.web>  
    <customErrors mode="On" defaultRedirect="yourCustomErrorPage.aspx"> 
    <error statusCode="404" redirect="PageNotFound.aspx" /> 
    </customErrors> 
</system.web> 

और इतने पर।

वैकल्पिक रूप से आप आईआईएस से अपनी वर्चुअल निर्देशिका गुणों के कस्टमइरर्स टैब को संपादित करने के लिए अपनी त्रुटि प्रबंधन पृष्ठों को इंगित करने के लिए संपादित कर सकते हैं।

ऊपर 401.x त्रुटियों के लिए काम करने के लिए प्रतीत नहीं होता है - इस कोड को परियोजना लेख क्या एक बहुत ही इसी तरह की समस्या लगती है एक के लिए एक समाधान बताते हैं: Redirecting to custom 401 page

+0

धन्यवाद, यह त्रुटियों को संभालने के बारे में पूरी मार्गदर्शिका है, मैं एक्सएमएल के एक ही टुकड़े के साथ बिल्कुल खत्म होता हूं। हालांकि, यह अनुरोध की लंबाई समाप्त होने पर मामले की मदद नहीं कर रहा है। – st78

+0

अंतिम संपादन देखें और मुझे बताएं कि क्या आप – JohnIdol

+0

के साथ आते हैं, जो इस पृष्ठ पर आते हैं और यह नहीं जानते कि maxRequestLength कैसे सेट करें: [MSDN] (http://msdn.microsoft.com/en-us/ लाइब्रेरी/e1f13641.aspx) –

-1

आप पोस्टफाइल (FileUpload.PostedFile.ContentLength) की लंबाई की जांच कर सकते हैं, यह देखने के लिए कि यह सीमा से नीचे है या नहीं और यदि आवश्यक हो तो बस एक दोस्ताना त्रुटि संदेश दिखा रहा है।

+0

काम नहीं करता - asp.net इस बिंदु पर नहीं पहुंच सकता है। – st78

+0

ठीक है, यह मेरे लिए नया है, मैंने सोचा कि आप फ़ाइल अपलोड करने/इसे अस्वीकार करने का निर्णय लेने से पहले सामग्री की लंबाई की जांच कर सकते हैं। –

+0

जानकारी के लिए धन्यवाद, मैंने अभी इसे चेक आउट किया है और यह असफल हो जाता है। जानना अच्छा है क्योंकि मैंने पहले इसका इस्तेमाल किया है और यह नहीं पता था कि इसमें कोई समस्या है। –

0

आप Global.asax - OnError() हैंडलर में त्रुटि को पकड़ने में सक्षम होना चाहिए। लेकिन दुर्भाग्यवश, आपका प्रारंभिक अनुरोध समाप्त हो जाएगा और आप उपयोगकर्ता को कुछ त्रुटि अधिसूचना के साथ एक ही अपलोड पृष्ठ प्रस्तुत करने में सक्षम नहीं होंगे।

आप सबसे ज्यादा क्या कर सकते हैं, ऑनरर() हैंडलर के भीतर से सरल रीडायरेक्ट क्लॉज के साथ एक दोस्ताना त्रुटि पृष्ठ प्रदर्शित करना है और उस पृष्ठ पर उपयोगकर्ता को उस पृष्ठ पर वापस लाने के लिए कुछ बैक लिंक या समान कार्यक्षमता है जहां उन्होंने ट्रिगर किया पहली जगह में त्रुटि।

अद्यतन:

मैं हाल ही में फाइल अपलोड पर सटीक जांच लागू करने के लिए था और मैं क्या के साथ आया था SWFUpload पुस्तकालय जो पूरी तरह मेरी जरूरतें पूरी नहीं है और यह भी अतिरिक्त सुविधाओं का एक बहुत कुछ है। मैंने स्टीव सैंडर्सन द्वारा प्रदान की गई jquery wrapper के साथ इसका इस्तेमाल किया। अधिक जानकारी here मिल सकती है।

बिंदु यह है कि फ्लैश क्लाइंट पक्ष पर फ़ाइल आकार का पता लगाने में सक्षम है और यदि मामला पूरा हो जाता है तो ठीक से प्रतिक्रिया दें। और मुझे लगता है कि यह वही है जो आपको चाहिए।

और भी, यदि आप क्लासिक फ्लैश स्थापित नहीं करते हैं तो आप मूल अपलोड बटन 0 पर गड़बड़ कर देना चाहते हैं तो फ्लैश डिटेक्शन चेक लागू कर सकते हैं।

+0

यह सच है, मैं OnError में अपवाद पकड़ने में सक्षम हूं, हालांकि, Response.Redirect() कुछ भी नहीं करता है। – st78

1

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

यह एएसपी.नेट में एक ज्ञात समस्या है। एक और (लंगड़ा) विकल्प अनुरोध में पहले इसे संभालना है और शायद फ्लैश-आधारित अपलोडर का उपयोग करना है। जॉन नीचे दिए गए लिंक में कई से लिंक करता है।

अद्यतन: जॉन गैलोवे looked deeper into this problem के लिए लग रहा था और ऐसा लगता है जैसे एक रिया-अपलोड करने वाले, केवल समझदार विकल्प है, क्योंकि आईआईएस हमेशा फ़ाइल निगल और फिर आप बता कि यह बड़ी करने के लिए करने के लिए लगता है।

+0

हमारा सर्वर आईआईएस 7 चलाता है, क्या आप कुछ लिंक/कीवर्ड प्रदान कर सकते हैं जहां इस मुद्दे को दूर करने का उत्तर देखने के लिए? – st78

1

सर्गेई,

प्रति JohnIdol के उत्तर, आपको स्टेटस कोड के लिए एक कस्टम त्रुटि पृष्ठ सेट अप करने की आवश्यकता है। उदा .:

<customErrors mode="On" defaultRedirect="~/Errors/Error.aspx"> 
        <error statusCode="413" redirect="~/Errors/UploadError.aspx"/> 
    </customErrors> 

मुझे पता है क्योंकि मैं एक ग्राहक परियोजना पर एक ही समस्या हल करने के लिए किया था, और इस समाधान है कि मेरे लिए काम किया था। दुर्भाग्य से यह एकमात्र समाधान था जो मुझे मिला ... कोड में इस विशेष समस्या को पकड़ना संभव नहीं था; उदाहरण के लिए, पोस्ट की गई फ़ाइल की लंबाई को जांचना जैसे स्नोमैग ने सुझाव दिया है, या global.asax में एक त्रुटि को पकड़ रहा है। आपके जैसे काम करने के समाधान के साथ आने से पहले, मैंने इन अन्य दृष्टिकोणों की भी कोशिश की थी। (वास्तव में जब मैं अपनी समस्या पर काम कर रहा था तो अंततः मुझे वेब पर यह कहीं मिला)।

उम्मीद है कि मदद करता है।

+1

अजीब, मुझे 'अधिकतम अनुरोध लंबाई पार हो गई' पर त्रुटि 500 ​​मिलती है। –

0

बड़े अपलोड को संभालने का सबसे अच्छा तरीका एक समाधान का उपयोग करना है जो एक HttpModule लागू करता है जो फ़ाइल को टुकड़ों में तोड़ देगा। वहां से पूर्व-लुढ़काए गए समाधानों में से कोई भी आपको फ़ाइल आकार को सीमित करने की अनुमति दे सकता है। अन्य लोगों ने इस पृष्ठ पर उन लोगों के लिए लिंक पोस्ट किए हैं, इसलिए मैं परेशान नहीं होगा। हालांकि, अगर आप इससे परेशान नहीं करना चाहते हैं तो इसे अपने ऐप के Global.asax एप्लिकेशन_इरर ईवेंट में संभाल सकता है। यदि आपका आवेदन .NET 4.0 है, वहाँ में कोड के इस ब्लॉक को छड़ी:

if (ex.InnerException != null && ex.InnerException.GetType() == typeof(HttpException) && ((HttpException)ex.InnerException).WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge) 
    { 
     //Handle and redirect here, you can use Server.ClearError() and Response.Redirect("FileTooBig.aspx") or whatever you choose 
    } 

स्रोत: http://justinyue.wordpress.com/2010/10/29/handle-the-maximum-request-length-exceeded-error-for-asyncfileupload-control/

आप किसी पुराने ढांचे पर चला रहे हैं, कोड यहाँ (यह VB में है, लेकिन कोशिश अनुवाद करना आसान है): http://www.webdeveloper.com/forum/showthread.php?t=52132