मुझे पता है कि इस तरह के प्रश्न हैं, लेकिन मुझे अभी तक कोई अच्छा जवाब नहीं मिला है। छवि, पेपर क्लिप लगाव: मैं क्या करने की जरूरत है मेरी बनाने तरीकों में से एक है, जो एक बुलाया सहित कुछ अलग-अलग विशेषताओं में शामिल करने के लिए एक वस्तु का वर्णन भेज हैएक रेल में फ़ाइलों को भेजना JSON API
has_attached_file :image
अब मैं उस छवि को भेजने पढ़ा है बेस 64 के रूप में छवि को एन्कोडिंग और डीकोड करके JSON में सीधे किया जा सकता है, लेकिन यह मेरे लिए एक गंदे समाधान की तरह लगता है। बेहतर तरीके होना चाहिए।
एक और समाधान एक मल्टीपार्ट/फॉर्म-डेटा अनुरोध भेज रहा है, एक LEEjava describes here. की तरह यह समस्या यह है कि अनुरोध पैराम्स रेल 3.2.2 में सही ढंग से व्याख्या नहीं किए जाते हैं, और JSON.parse त्रुटि को थकाता है यह पैराम्स को पार्स करने की कोशिश करता है, या शायद यह रेल है जो कुछ गलत व्याख्या कर रहा है।
Started POST "/api/v1/somemodel.json?token=ZoipX7yhcGfrWauoGyog" for 127.0.0.1 at 2012-03-18 15:53:30 +0200 Processing by Api::V1::SomeController#create as JSON Parameters: {"{\n
\"parentmodel\": {\n \"superparent_id\": 1,\n
\"description\": \"Enjoy the flower\",\n \"\": "=>{"\n
{\n \"someattribute\": 1,\n
\"someotherattribute\": 2,\n \"image\": \"image1\"\n
}\n "=>{"\n }\n}"=>nil}}, "token"=>"ZoipX7yhcGfrWauoGyog"}
इसे पढ़ने के लिए काफी मुश्किल है, क्षमा करें। JSON.parse (पैरामीटर [: parentmodel]) संभव नहीं यहाँ है, और मैं नहीं कर सकता JSON.parse (पैरामीटर) क्योंकि या तो टोकन विशेषता का, JSON.parse (पैरामीटर) इस त्रुटि फेंकता है:
TypeError (can't convert ActiveSupport::HashWithIndifferentAccess into String)
जो मुझे विश्वास दिलाता है कि मैं या तो इस समस्या को पूरी तरह गलत कर रहा हूं, या मैं बस कुछ कर रहा हूं। किसी भी तरह से, हम यह सुनिश्चित कर सकते हैं कि मैं कुछ के बारे में गलत हूं। :)
क्या ऐसा करने का कोई बेहतर तरीका है? क्या कोई मुझे किसी गाइड/ट्यूटोरियल पर इंगित कर सकता है, या एक उत्तर लिख सकता है कि मुझे यह कैसे करना चाहिए?
अग्रिम धन्यवाद
अद्यतन: इसलिए मैं वास्तव में अब काम मिल गया है, लेकिन केवल परीक्षण में। मुझे पूरा यकीन नहीं है कि यह कैसे काम करता है, लेकिन शायद कोई मेरे लिए अंतराल भर सकता है? यह परीक्षण कोड का हिस्सा है (छवि: fixture_file_upload (...) महत्वपूर्ण हिस्सा है)।
parts_of_the_object = { someattribute: 0, someotherattribute: 0, image: fixture_file_upload('/images/plot.jpg', 'image/jpg') }
मेरे पैरामीटर [] एक सामान्य HTML रूप की तरह दिखता है प्रस्तुत की गई थी, जो अजीब (और भयानक) है:
Parameters: {"superparentid"=>"1", "plots"=>[{"someattribute"=>"0", "someotherattribute"=>"0", "image"=>#<ActionDispatch::Http::UploadedFile:0x007f812eab00e8 @original_filename="plot.jpg", @content_type="image/jpg", @headers="Content-Disposition: form-data; name=\"plots[][image]\"; filename=\"plot.jpg\"\r\nContent-Type: image/jpg\r\nContent-Length: 51818\r\n", @tempfile=#<File:/var/folders/45/rcdbb3p50bl2rgjzqp3f0grw0000gn/T/RackMultipart20120318-1242-1cn036o>>}], "token"=>"4L5LszuXQMY6rExfifio"}
अनुरोध जैसे और पोस्ट अनुरोध rspec साथ किया जाता है बना है:
post "/api/v1/mycontroller.json?token=#{@token}", thefull_object
तो मुझे यह सब काम मिल गया है। मुझे नहीं पता कि यह वास्तव में कैसे काम करता है! मैं खुद ही इस तरह की प्रतिक्रिया बनाने में सक्षम होना चाहता हूं, न केवल आरएसपीसी से। :-)
मुझे पता है अगर यह आपके देव/prod मोड में काम नहीं करता है, मैं इस का हल मिल गया कुछ दिन पहले लेकिन forg एक उत्तर लिखने के लिए। यह आपके जैसा बहुत सुंदर है, केवल मैं इसे मॉडल में कर रहा हूं (बेस 64 डेटा को सीधे image_data विशेषता में भेज रहा हूं)। मुझे आपके समाधान को और अधिक पसंद है। मुझे बताएं कि यह कैसे जाता है और अगर मैं कर सकता हूं तो मैं मदद करूंगा। –
जो मैं देख सकता हूं उससे जवाब सही है इसलिए मैं बक्षीस दे रहा हूं। –
यह एक अच्छा जवाब है, लेकिन कम से कम रेल 3/रूबी 1.9 में कुछ मामूली छेद हैं। सबसे पहले, सुनिश्चित करें कि आप लिखने के बाद 'tempfile.rewind()' सुनिश्चित करें, अन्यथा आपको 0 लंबाई वाली फाइलें मिलेंगी। – Shannon