मल्टीपार्ट फ़ील्ड / फ़ाइल डेटा को अलग से पार्स कैसे करें?


9

मैं दो बार एक मल्टीपार्ट फॉर्म को पार्स करना चाहता हूं: एक बार आने वाले फ़ील्ड्स को हथियाने के लिए, और बाद में फ़ाइल अपलोड को संसाधित करने के लिए।

मैं अपने नोड ऐप के भीतर चिंताओं का उचित पृथक्करण बनाए रखने की कोशिश कर रहा हूं:

  • नियंत्रक आने वाले क्षेत्रों को संभालने के लिए जिम्मेदार है।
  • मॉडल अपलोड फ़ाइल तर्क के लिए जिम्मेदार है।

मुझे नया उदाहरण बनाने के लिए फ़ील्ड डेटा को मॉडल में पास करने की आवश्यकता है, इसलिए फ़ाइल अपलोड शुरू होने से पहले फ़ील्ड डेटा उपलब्ध होना चाहिए ।

वर्तमान में प्रत्येक form.parse()या समतुल्य फ़ंक्शन फ़ील्ड और फ़ाइलों दोनों को एक साथ पार्स करता है । उदाहरण: req.pipe(busboy)फ़ाइल और फ़ील्ड दोनों को एक साथ संभालता है।

मैंने नोड-मल्टीपार्टी, दुर्जेय, बसबॉय, मल्टर जैसे मॉड्यूल की जांच की है। किसी को भी इसके लिए कोई समाधान नहीं लगता है।

इस बात का एक उदाहरण कि मैं क्या हासिल करना चाहूंगा: /programming/22336177/node-js-busboy-parse-fields-and-files-seperatly

क्या यह भी संभव है?


2
प्रतीक्षा करें ... तो आप तर्क और नियंत्रण के लिए मॉडल के लिए जिम्मेदार होंगे?
मैथ्यू मार्क मिलर

अच्छी पकड़, आम तौर पर यह कि वास्तुकला चिंताओं को मिलाने के लिए खराब है। यह 2 साल पहले था, इसलिए मुझे ठीक से याद नहीं है कि जब मैं यह सवाल पूछ रहा था तो मैं किस समस्या का हल कर रहा था, लेकिन मुझे याद है कि मैं चाहता था कि बचाओ तर्क मानगो स्कीमा ऑब्जेक्ट का हिस्सा हो। मॉडल पर मानगो विधि होने से, मैं अपने ऐप में कहीं से भी आसानी से बचा सकता था। पीछे मुड़कर देखें, तो मुझे नहीं लगता कि बचाने का तरीका सामान्य तरीका है, जो एक मॉडल विधि है, शायद इसे एक अलग सेवा पद्धति के रूप में रखना चाहिए। mongoosejs.com/docs/guide.html
स्कॉट

1
योग्य मुझे एहसास नहीं था कि यह कितना पुराना था ... यह किसी तरह मेरी "जरूरतों के जवाब" कतार के शीर्ष पर प्रवाहित हो गया। और हाँ, मुझे लगता है कि जब डेटा उन वस्तुओं को दो आयामों में स्थानांतरित कर रहा हो सकता है तो ESPECIALLY लगातार डेटा से अलग संचालन को बनाए रखना सही है। नियंत्रक के बाहर चीजों को पेंच करना और जारी रखना आसान बनाता है।
मैथ्यू मार्क मिलर

@Scott "यह 2 साल पहले था, इसलिए मुझे ठीक से याद नहीं है कि जब मैं यह सवाल पूछ रहा था तो मैं किस समस्या का हल कर रहा था" - तो आप इस सवाल को हटाने के लिए विचार कर सकते हैं क्योंकि यह संभावना नहीं है कि इसका जवाब सभी पर होगा ...
टिमोथी ट्रकले

जवाबों:


1

मैं इस प्रश्न का उत्तर देना चाहता हूं:

क्या यह संभव है, मल्टीपार्ट फ़ील्ड हेडर को अपनी सामग्री से पहले पढ़ने के लिए?

जब मैं मल्टीपार्ट आरएफसी को देखता हूं, तो मैं इस उदाहरण को देखता हूं:

From:  Nathaniel Borenstein <nsb@bellcore.com> 
To: Ned Freed <ned@innosoft.com> 
Subject: Formatted text mail 
MIME-Version: 1.0 
Content-Type: multipart/alternative; boundary=boundary42 


--boundary42 
Content-Type: text/plain; charset=us-ascii 

...plain text version of message goes here.... 

--boundary42 
Content-Type: text/richtext 

.... richtext version of same message goes here ... 
--boundary42 
Content-Type: text/x-whatever 

.... fanciest formatted version of same  message  goes  here 
... 
--boundary42-- 

मैं ध्यान देता हूं कि हेडर Content-Typeशरीर के अंगों के बीच स्थित हैं। इस प्रकार मैं निष्कर्ष निकालता हूं, आप सभी निकायों से पहले सभी हेडर नहीं कर सकते।

अब आपके प्रश्न के लिए:

मैं दो बार एक मल्टीपार्ट फॉर्म को पार्स करना चाहता हूं: एक बार आने वाले फ़ील्ड्स को हथियाने के लिए, और बाद में फ़ाइल अपलोड को संसाधित करने के लिए।

यह निर्भर करता है कि आप "पार्सिंग" से क्या मतलब है। HTTP संदेश को पढ़ते समय इसमें शामिल होने के लिए कुछ पार्सिंग शामिल है। अंत में अंत में एक अतिरिक्त है --:

--boundary42--

दो बार पार्स करने के विचार:

  • मैं निष्कर्ष निकालता हूं, एक को सॉकेट से पूरे उत्तर की प्रतिलिपि बनाने और बाद में पार्स करने में सक्षम होना चाहिए।
  • आप फ़ाइल के मुख्य भाग को फ़ाइल के मुख्य भाग से पहले पढ़ सकते हैं लेकिन सभी फ़ाइलों के सभी शीर्षकों को नहीं।

क्या यह भी संभव है?

हां, ऐसे मामले हैं जिनमें यह संभव है (जब फ़ाइल आपके द्वारा अपलोड की गई अंतिम चीज़ है)। मुझे नहीं पता कि यह सार्वभौमिक रूप से संभव है कि आपको क्या चाहिए क्योंकि मुझे नहीं पता कि आप क्या करना चाहते हैं।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.