का उपयोग कर फ़ाइल अपलोड सामग्री के साथ मल्टीपार्ट HTTP फॉर्म डेटा पार्सिंग multipart/form-data फ़ाइल अपलोड समाधान बहुत सारे हैं, लेकिन मैं स्कैला के लिए एक नि: शुल्क खड़ा नहीं ढूंढ पा रहा हूं।स्केल
Play2 में फ्रेमवर्क के हिस्से के रूप में यह कार्यक्षमता है और स्प्रे मल्टीपार्ट फॉर्म डेटा का भी समर्थन करता है। दुर्भाग्य से ये दोनों शेष टूलसेट में काफी एकीकृत होते हैं (मैं यहां गलत हो सकता हूं)।
मेरा सर्वर फिनगेल (जो वर्तमान में मल्टीपार्ट फॉर्म डेटा का समर्थन नहीं करता है) का उपयोग करके विकसित किया गया है, और यदि संभव हो तो मैं एक मुफ्त स्थायी lib या 'रोल अपना खुद का' समाधान का उपयोग करना चाहता हूं।
यह एक ठेठ बहुखण्डीय/फार्म-डेटा संदेश है:
--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="value1"
First parameter content
--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="value2"
Second parameter content
--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg
$%^&#$%^%#$
--*****org.apache.cordova.formBoundary--
इस उदाहरण में, *****org.apache.cordova.formBoundary
, प्रपत्र सीमा है, इसलिए बहुखण्डीय अपलोड 2 पाठ मापदंडों और एक छवि है (मैं के लिए छवि डेटा concatenated स्पष्टता)।
यदि कोई व्यक्ति जो मेरे से बेहतर स्कैला जानता है, तो मुझे इस सामग्री को पार्स करने के तरीके पर एक रैंड डाउन दे सकता है, मैं बहुत आभारी रहूंगा।
शुरू में, मैंने सोचा कि मैं जल्दी से कर रही तीन में सामग्री विभाजित होगा:
data.split("\\Q--*****org.apache.cordova.formBoundary\\E") foreach println
लेकिन निष्पादन विशेष रूप से धीमी गति से (अद्यतन - इस समय को गर्म करने के कारण किया गया था) है। क्या भागों को विभाजित करने का एक और अधिक प्रभावी तरीका है? मेरी रणनीति सामग्री को भागों में विभाजित करना है, और भागों को उप-भागों में विभाजित करना है। क्या यह एक गड़बड़ दृष्टिकोण है? मैंने राज्य मशीनों के साथ हल की जाने वाली समान समस्याओं को देखा है? एक अच्छा कार्यात्मक दृष्टिकोण क्या है। ध्यान रखें, समस्या को हल करने की कोशिश करते समय मैं स्कैला के लिए एक उचित दृष्टिकोण सीखने की कोशिश कर रहा हूं।
अद्यतन:
मैं वास्तव में सोचा कि यह समस्या का समाधान एक पंक्ति या दो स्काला में होगा। अगर कोई इस सवाल पर एक स्लिम समाधान के साथ ठोकर खाता है, तो कृपया इसे कम करने के लिए समय दें। मेरी समझ से कोई पैटर्न मिलान, पार्सिंग संयोजक, निष्कर्षण या बस स्ट्रिंग को विभाजित करके इस संदेश को पार्स कर सकता है। मैं इस तरह की समस्या को हल करने का सबसे अच्छा तरीका खोजने की कोशिश कर रहा हूं, क्योंकि एक परियोजना जिसमें मैं काम कर रहा हूं, में बहुत सारी प्राकृतिक भाषा पार्सिंग शामिल है, और मुझे अपना खुद का कस्टम पार्सिंग टूल लिखना है। मुझे स्कैला की अच्छी समझ मिल रही है, लेकिन कुछ भी विशेषज्ञ की सलाह नहीं मानता है।
यह समस्या को हल करने के बारे में नहीं है, यह इस प्रकार की समस्या को हल करने के लिए सबसे अच्छा (और उम्मीदवार सरलतम) संभव तरीका खोजने के बारे में है।
आप यहां प्ले कोड पा सकते हैं https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/api/ mvc/ContentTypes.scala यह उचित समझ में आता है –
धन्यवाद @ पॉल। मैंने प्ले कोड पर एक नज़र डाली, लिंक के लिए धन्यवाद। मैं इसे सबसे अधिक समझता हूं, हालांकि, मैं जो कुछ करने की कोशिश कर रहा हूं उसके लिए यह थोड़ा जटिल है। मैं बस ऊपर दिए गए तीन डेटा पैकेट को अलग करने और प्रत्येक पैकेट की सामग्री तक पहुंचने का सबसे आसान तरीका ढूंढ रहा हूं। नियमित अभिव्यक्तियों के आधार पर घोंसला वाले विभाजन के कुछ प्रकार चाल चल सकते हैं? – Jack
मैं इस प्रश्न को फिर से लिखने का सुझाव दूंगा - मैंने फ़ाइल अपलोड और चीजों के लिए विशिष्ट होने के नाते इसे थोड़ी देर के लिए अनदेखा कर दिया है, जबकि यह पार्सिंग पर एक सामान्य प्रश्न प्रतीत होता है। मैंने इसे इंगित करने के लिए पुनः प्रयास किया है, लेकिन एक शीर्षक जो इसे एक पार्सर लिखने के बारे में स्पष्ट करता है, शायद अधिक जवाब आकर्षित करेगा। – Submonoid