2016-04-28 18 views
6

पर एक छवि को पुनर्प्राप्त करने के लिए कैसे मैं इलेक्ट्रॉन का उपयोग कर डेस्कटॉप ऐप बना रहा हूं, जो मूल रूप से जावास्क्रिप्ट है।किसी डेस्कटॉप ऐप से एक रेल एपीआई

इसे में, मैं इस तरह मेरे रेल एपीआई के लिए एक छवि भेज रहा:

var myHeaders = new Headers(); 
myHeaders.append('Authorization', 'Token token=redacted'); 
myHeaders.append('Content-Type', 'application/json'); 
myHeaders.append('Accept', 'application/json'); 

... 

var formData = new FormData(); 
formData.append("img", base64EncodedImage); 
var myPost = {method: 'POST', headers: myHeaders, body: formData} 
fetch("url", myPost) 

(सरलीकृत)

मेरी रेल कंसोल में, मैं देख रहा हूँ:

{"REMOTE_ADDR"=>"127.0.0.1", "REQUEST_METHOD"=>"POST", "REQUEST_PATH"=>"/task/screenshot", "PATH_INFO"=>"/task/screenshot", "REQUEST_URI"=>"/task/screenshot", "SERVER_PROTOCOL"=>"HTTP/1.1", "HTTP_VERSION"=>"HTTP/1.1", "HTTP_HOST"=>"localhost:3000", "HTTP_CONNECTION"=>"keep-alive", "CONTENT_LENGTH"=>"454856", "HTTP_ACCEPT"=>"application/json", "HTTP_ORIGIN"=>"null", "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) testivate-research-gigs/1.0.0 Chrome/49.0.2623.75 Electron/0.37.5 Safari/537.36", "HTTP_AUTHORIZATION"=>"Token token=redacted", "CONTENT_TYPE"=>"application/json", "HTTP_ACCEPT_ENCODING"=>"gzip, deflate", "HTTP_ACCEPT_LANGUAGE"=>"en-US", "rack.url_scheme"=>"http", "SERVER_NAME"=>"localhost", "SERVER_PORT"=>"3000", "QUERY_STRING"=>"", "rack.tempfiles"=>[#<Unicorn::TmpIO:/var/folders/k9/vnpft_6d7qs6xmdb9_4svvmw0000gn/T/0.19309304750270062>], "rack.input"=>#<Rack::Lint::InputWrapper:0x007fe1de317000 @input=#<Unicorn::TeeInput:0x007fe1de31d950 @len=454856, @chunked=false, @socket=#<Kgio::Socket:fd 7>, @parser=#<Unicorn::HttpParser:0x007fe1db08ce00>, @buf="", @rbuf="------WebKitFormBoundaryxkkhvE17qoI5ozlK\r\nContent-Disposition: form-data; name=\"img\"\r\n\r\ndata:image/jpeg;base64,iVBORw0KGgoAAAANSUhEU...

लेकिन मैं छवि पर नहीं जा सकता।

> request.body.read 
> request.body.rewind 
> request.body.read 
> request.env 

है कि, मैं आदेशों की सबसे करने के लिए खाली प्रतिक्रियाएं प्राप्त करते हैं, और फिर यह सिर्फ अनिश्चित काल के बाद मैं request.env टाइप करें, वहाँ लटका हुआ है की ओर लौटने के बिना: यह जब मैं जिज्ञासा का उपयोग कर नियंत्रक में छोड़ मैं क्या देख रहा है शीघ्र।

मैं छवि पर कैसे पहुंचूं?

धन्यवाद।

बीटीडब्लू, अन्य क्रियाएं जो POST प्राप्त कर रही हैं लेकिन एम्बेडेड छवियों के साथ पूरी तरह से काम नहीं कर रही हैं। इससे पहले, जब मैं XMLHttpRequest()fetch() का उपयोग नहीं कर रहा था, तो यह क्रिया पूरी तरह से काम कर रही थी, लेकिन मुझे अपने Google क्रोम एक्सटेंशन को इलेक्ट्रॉन ऐप में बदलने के लिए स्विच करना पड़ा।

अद्यतन

मैं सीधे S3 के बजाय S3-रेल के माध्यम से करने के लिए अपनी छवियों को अपलोड करने से खुद के लिए इस समस्या का समाधान। यह न केवल काम करता है बल्कि ऐप के माध्यम से जाने से तेज़ है, जिसे अब मुझे केवल यह कहना है कि छवि को कहां देखना है। लेकिन मेरे मूल मुद्दे को संबोधित नहीं किया गया था, इसलिए मैं इस सवाल को छोड़ रहा हूं और बक्षीस खुला हूं। शायद कोई इसे हल करेगा, बक्षीस का दावा करेगा, और एक उत्तर लिख देगा कि किसी और को ट्रैक के नीचे उपयोगी लगेगा।

+0

रेल में एक छवि को संग्रहीत करने, किसी भी मणि का उपयोग करने के लिए? – 7urkm3n

+0

छवि अपलोड http: // stackoverflow के लिए पेपरक्लिप मणि का उपयोग करें।कॉम/प्रश्न/35765578/रेल-एपीआई-पेपरक्लिप-अपलोडिंग-इमेज-कनवर्टिंग-टू-बेस -64-एंड-सेविंग-इट-एंड/35766241 # 35766241 –

+0

ऐसा लगता है जैसे आपने पैरामीटर फ़िल्टर किया है। – joewoodward

उत्तर

0

मैं डेस्कटॉप ऐप से एपीआई के स्थानीय रूप से प्रदत्त संस्करण (यानी टर्मिनल से रेल सर्वर चलाता हूं) में अनुरोध भेजकर परीक्षण करता हूं और रेलवे कंसोल को प्राप्त करने के लिए देखता हूं। आपको पैराम्स की एक सूची देखना चाहिए। img परम अनुरोध में शामिल है तो आप शायद अपने रेल नियंत्रक

में मजबूत पैरामीटर के माध्यम से काली सूची में डालने कर रहे हैं आप तो img परम न दिखे, तो आप सही तरीके से

प्रपत्र डेटा भेजने के लिए डेस्कटॉप ऐप्लिकेशन बदलाव करने की जरूरत है

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

+0

हाय @joewoodward। धन्यवाद। मैं वास्तव में जावास्क्रिप्ट की 'fetch()' विधि का उपयोग कर 'POST' भेज रहा हूं। यही कारण है कि 'var myPost = {method:' POST ', हेडर: myHeaders, body: formData} '। जब मैं कहता हूं "प्राइ का उपयोग कर मेरे नियंत्रक में जो कुछ मैं देखता हूं," मैं स्थानीयहोस्ट पर ऐप चलाने पर जो देखता हूं उसके बारे में बात कर रहा हूं। –

1

से एक को नहीं लाया जा आप POST के साथ ठीक से छवि भेज रहे हैं और यह है, तो अपनी बेस 64 एन्कोडेड छवि पढ़ सकते हैं और इसे लिख सकते हैं:

File.open('some/path/to/image.jpg', 'wb') do|f| 
    f.write(Base64.decode64(base_64_encoded_data)) 
end 

आप request.body से सीधे क्यों पढ़ रहे हैं? आपके नियंत्रक में params में फॉर्म डेटा से मूल्यों का हैश होना चाहिए।

संबंधित मुद्दे