मैं एक मल्टीपार्ट फॉर्म सर्वर पर पोस्ट करने के लिए स्प्रे का उपयोग करना चाहता हूं। विशेष रूप से मैं एक छवि पोस्ट करना चाहता हूँ।स्प्रे क्लाइंट पोस्ट मल्टीपार्ट
मुझे किस समस्या का सामना करना पड़ रहा है, फाइल के मार्शलिंग को मल्टीपार्ट करना है। भले ही स्प्रे में वे इसका एक डिफ़ॉल्ट मार्शलर का जिक्र करते हैं, मैं बस दोनों को एक साथ प्लग नहीं कर सकता।
मैं वर्तमान में स्प्रे 1.0-एम 7 का उपयोग कर रहा हूं क्योंकि मैं स्कैला 2.10 में माइग्रेट किया गया है, अगर उदाहरण उस शाखा के अनुरूप हो सकता है, तो यह अद्भुत होगा।
यह क्या मैं वर्तमान में है:
val bis = new BufferedInputStream(new FileInputStream(file))
val bArray = Stream.continually(bis.read).takeWhile(-1 !=).map(_.toByte).toArray
Logger.error("About to post with spray")
pipeline(Post("/saveImageWithSpray", bArray))
और निश्चित रूप से मैं कह रहा कोई त्रुटि मिलती है:
For request 'POST /saveImageWithSpray' [Missing boundary header]
अधिकांश उदाहरण मैं (के रूप में [X]) मार्शल के निर्देश सामग्री का उपयोग लगता है , फिर भी मैं स्प्रे-रूटिंग का उपयोग नहीं कर रहा हूं, मुझे सिर्फ एक अन्य ढांचे पर बनाए गए एप्लिकेशन में स्प्रे-क्लाइंट का उपयोग करके पोस्ट निष्पादित करने की आवश्यकता है।
धन्यवाद
संपादित
मैं वास्तव में इस तरह यह मार्शल में कामयाब रहे:
val pipeline = (
addHeader("Content-Type", "multipart/form-data")
~> sendReceive(conduit)
)
val bis = new BufferedInputStream(new FileInputStream(file, "UTF-8"))
val bArray = Stream.continually(bis.read).takeWhile(-1 !=).map(_.toByte).toArray
Logger.error("About to post with spray "+bArray.length.toString)
pipeline(Post("/saveImageWithSpray", MultipartFormData(Map(
"spray-file" -> BodyPart(
HttpEntity(Some(HttpBody(ContentType(MediaTypes.`image/gif`), bArray))),
HttpHeaders.`Content-Disposition`("form-data", Map("name" -> "spray-file","filename"->"Fuurin (Glass Wind Chime).gif"))::Nil
)
))))
दुर्भाग्य से यह अभी भी काम नहीं कर रहा है, डेटा स्थानान्तरित हो रहा है लेकिन सर्वर नहीं कर सकते लगता है फ़ाइल।
POST /saveImageWithSpray HTTP/1.1
Host: localhost:9000
User-Agent: spray-can/1.0-M7
Content-Type: multipart/form-data; boundary="oxz40rxXXQyDx+IUKcz7QYpJ"
Content-Length: 1725
--oxz40rxXXQyDx+IUKcz7QYpJ
Content-Disposition: form-data; name="spray-file"
Content-Disposition: form-data; name="spray-file"; filename="Fuurin (Glass Wind Chime).gif"
Content-Type: image/gif
GIF89a0.0..........
BINARY DATA
..P...L0..8.....X.....l..?...;
--oxz40rxXXQyDx+IUKcz7QYpJ--HTTP/1.1 500 Internal Server Error
Content-Type: text/plain; charset=utf-8
Content-Length: 25
File not found spray-file
यह एक उन्नत बाकी क्लाइंट के साथ किए गए एक वैध अनुरोध का एक पर कब्जा है: जवाब देने के लिए
POST /saveImageWithSpray HTTP/1.1
Host: localhost:9000
Connection: keep-alive
Content-Length: 2573
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryuiIgwVg3rBQLFNGB
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
------WebKitFormBoundaryuiIgwVg3rBQLFNGB
Content-Disposition: form-data; name="spray-file"; filename="Gunsen (Fan) .gif"
Content-Type: image/gif
GIF89a0.0.........u.QQ..Z..z.wW[[[.
BINARY DATA
.....&...Z(.c.Q.....T.B7..S...!...p[...8."...;
------WebKitFormBoundaryuiIgwVg3rBQLFNGB--
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 24
File uploaded with spray
वर्तमान मल्टीपार्टफॉर्मडाटा मार्शलर की कमी की प्रतीत होती है, जो 'फ़ाइल नाम' पैरामीटर का समर्थन नहीं करती है। मैंने इसे ट्रैक करने के लिए एक समस्या बनाई: https://github.com/spray/spray/issues/327 – jrudolph
तो @dgrandes ... क्या आपका फ़िक्स काम किया? क्या आपके फॉर्म-डेटा तत्व का स्प्रे-फ़ाइल नाम है? मुझे एक समान समस्या है, 2 फॉर्म-डेटा तत्वों के साथ: एक टेक्स्ट/सीएसवी फ़ाइल और प्राधिकरण स्ट्रिंग। क्या आपने सीमा स्ट्रिंग स्वयं बनाया है? धन्यवाद – iyerland
क्षमा करें @ मयूरलैंड, मैंने स्प्रे समाधान को त्याग दिया और सीधे प्ले में लागू किया! फ्रेमवर्क। माफ़ कीजिये! – dgrandes