1.6GB आकार की बड़ी फ़ाइलों को संसाधित करते समय मुझे एक SystemOutOfMemoryException मिलता रहता है। मैं बस सोच रहा था कि web.config में मेरा कॉन्फ़िगरेशन सही है या नहीं। नीचे कोड की पंक्तियाँ हैं जिन्हें मैंने 1GB से अधिक आकार की बड़ी फ़ाइलों का समर्थन करने के लिए संशोधित किया है
<httpRuntime requestValidationMode="2.0" enableVersionHeader="false" maxRequestLength="457286400" executionTimeout="3600" targetFramework="4.5" fcnMode="Single" />
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="3294967295" />
</requestFiltering>
</security>
मुझे यकीन नहीं है कि यह सही है। मैंने आईआईएस सर्वर को टूल्स-> विकल्प-> प्रोजेक्ट एंड सॉल्यूशंस-> वेब प्रोजेक्ट्स-> "आईआईएस के 65 बिट संस्करण का उपयोग करें" के माध्यम से x64 में चलाने के लिए भी बदल दिया है।
मुझे यकीन नहीं है कि मैं क्या खो रहा हूं लेकिन मैं सिस्टम को स्मृति अपवाद से बाहर कर रहा हूं, भले ही मैंने पहले से ही स्मृति आकार में वृद्धि की हो
अद्यतन: जब तक क्लाइंट को इसकी आवश्यकता होती है, मैं .mp4 फ़ाइलों या किसी भी प्रकार की फ़ाइल जैसी बड़ी फ़ाइलों को संसाधित कर रहा हूं।
इसके अलावा, मैं फ्रंटएंड का उपयोग करके फ़ाइल अपलोड नहीं कर रहा हूं। हम जो करते हैं वह फाइलज़िला के माध्यम से बड़ी फ़ाइल अपलोड करता है और यदि फ़ाइल सर्वर पर अपलोड की जाती है तो हम मीडिया पेज में एक प्रविष्टि रखने के लिए इस फ़ाइल को संसाधित करने के लिए उम्ब्राको मीडिया सेवा का उपयोग करते हैं। हम MediaService को प्रोसेस करने के लिए अपनी बैकग्राउंड सर्विस को ट्रिगर करने के लिए Hangfire का भी उपयोग कर रहे हैं
2 जवाब
मेरी Umbraco MediaService में दूसरा और तीसरा पैरामीटर जोड़कर इस समस्या को हल करने में कामयाब रहा। प्रारंभ में मैं Service.MediaService.Save(iMediaFile)
का उपयोग कर रहा था, लेकिन ऐसा लगता है कि बड़ी फ़ाइल का उपयोग करते समय यह जानना आवश्यक था कि फ़ाइल को किसने अपलोड किया है, इसलिए इसे दूसरे पैरामीटर की आवश्यकता है जो कि user_id है और मैंने किसी भी त्रुटि संदेश को दबाने के लिए तीसरा पैरामीटर जोड़ा। चूंकि मुझे स्मृति अपवाद का सामना करना पड़ रहा था, वास्तव में त्रुटि यह थी कि मैंने दूसरे पैरामीटर में user_id पास नहीं किया था। इसलिए मेरा नया कोड बन गया Service.MediaService.Save(iMediaFile, user_id, false)
फिर से समाधान वास्तव में एक कॉन्फ़िगरेशन नहीं था क्योंकि मेरा कॉन्फ़िगरेशन फ़ाइल को संसाधित करने के लिए पर्याप्त था। त्रुटि दूसरा पैरामीटर गुम होने के कारण थी
इस तरह की बड़ी फ़ाइलों को स्वीकार करना सर्वोत्तम अभ्यास नहीं है। उदाहरण के लिए यह एक Ddos हमला करने की संभावना देता है। इसके अलावा आपको बहुत सारी मेमोरी की आवश्यकता होगी क्योंकि फ़ाइल को डिस्क पर रखने से पहले मेमोरी में संभाला जाएगा, इसलिए आपके पास मेमोरी के साथ समस्या है।
बेहतर उपाय यह होगा कि उन्हें जावास्क्रिप्ट के साथ खंडित किया जाए और छोटे पैकेट भेजे जाएं, और उन्हें वापस एक साथ सर्वर साइड में सिल दिया जाए। इसे स्वयं बनाने के बारे में एक बहुत अच्छी व्याख्या है: https://www.dotnetcurry.com/aspnet-mvc/893/upload-big-files-aspnet-mvc-azure-storage (आप अपने सत्रों को कैसे संभालते हैं, इस पर निर्भर करते हुए, इसे सत्र में जोड़ने से आपकी स्मृति समस्या का समाधान नहीं हो सकता है। मुझे लगता है कि आपको इसे डिस्क पर सहेजने की आवश्यकता होगी)
Memroy अपवाद से असंबंधित, लेकिन सुनिश्चित करें कि आप इसे <location path="xxx/yyy"> your web.config stuff </location>
में लपेटते हैं ताकि केवल यह URL बड़ी फ़ाइलों को स्वीकार कर सके।
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।