दिलचस्प पोस्ट
एक पेड़ में एक फ्लैट तालिका को पार्स करने के लिए सबसे कुशल / सुरुचिपूर्ण तरीका क्या है? SQL सर्वर 2005 में मैं कई पंक्तियों को अल्पविराम से सीमांकित सूची में कैसे जोड़ सकता हूँ? जावास्क्रिप्ट सॉर्ट विधि में नंबर को सॉर्ट करने के लिए कैसे नेस्टेड एनजी-क्लिक कॉल के बीच ईवेंट प्रचार को रद्द करने का सबसे अच्छा तरीका क्या है? SQL स्टेटमेंट में एएसपी चर का उपयोग कैसे करें जेएसपी: पैरामीटर को कैसे सी: सेट के माध्यम से पास करें? जेएसपी में वेरिएबल्स के स्कोप क्या हैं? अब क्या उपयोग करने के लिए Google समाचार एपीआई नापसंद है? सामान्य प्रकार का संग्रह उद्देश्य-सी में फ्लोट की तुलना करने वाली अजीब समस्या आईफ़ोन एसडीके में फ़ाइल के मालिक और सबसे पहले उत्तरदाता क्या हैं – xcode? बूटस्ट्रैप 4 – ग्लिफ़िकॉन्स माइग्रेशन? XML को पार्स करने की तुलना में JSON को पार्स करना अधिक आसान है HRESULT: 0x800A03EC वर्कशीट.रेंज पर सतर्क और खिड़की के बीच अंतर क्या है। नया एंड्रॉइड एक्शनबार समर्थन के लिए थीम। AppCompat.Light नहीं मिल सकता है

नोडजेएस: बेस 64-एन्कोडेड छवि डिस्क पर सहेज रहा है

मेरा एक्सप्रेस ऐप ब्राउज़र से बेस 64-एन्कोडेड पीएनजी प्राप्त कर रहा है (कैनवास से डेटाटाइम () के साथ जेनरेट किया गया है) और इसे एक फाइल में लिखना लेकिन फ़ाइल मान्य छवि फ़ाइल नहीं है, और "फ़ाइल" उपयोगिता केवल इसे "डेटा" के रूप में पहचानती है

var body = req.rawBody, base64Data = body.replace(/^data:image\/png;base64,/,""), binaryData = new Buffer(base64Data, 'base64').toString('binary'); require("fs").writeFile("out.png", binaryData, "binary", function(err) { console.log(err); // writes out file without error, but it's not a valid image }); 

Solutions Collecting From Web of "नोडजेएस: बेस 64-एन्कोडेड छवि डिस्क पर सहेज रहा है"

मुझे लगता है कि आप डेटा की तुलना में थोड़ी अधिक परिवर्तित कर रहे हैं। एक बार जब आप उचित एन्कोडिंग के साथ बफर बनाते हैं, तो आपको बफ़र को फ़ाइल में लिखना होगा।

 var base64Data = req.rawBody.replace(/^data:image\/png;base64,/, ""); require("fs").writeFile("out.png", base64Data, 'base64', function(err) { console.log(err); }); 

नया बफर (…, 'base64') इनपुट स्ट्रिंग को बफ़र में रूपांतरित कर देगा, जो कि सिर्फ बाइट्स की एक सरणी है, जो कि बेस 64 एन्कोडेड स्ट्रिंग के रूप में इनपुट की व्याख्या करता है। तो आप बस उस बाइट सरणी को फ़ाइल में लिख सकते हैं।

अद्यतन करें

जैसा कि टिप्पणियों में वर्णित है, req.rawBody अब एक बात नहीं है यदि आप express / connect का उपयोग कर रहे connect तो आपको bodyParser() मिडलवेयर का उपयोग करना चाहिए और bodyParser() उपयोग करना चाहिए, और यदि आप मानक नोड का उपयोग कर रहे हैं तो आपको इनकमिंग data इवेंट Buffer ऑब्जेक्ट्स एकत्रित करने और इस छवि डेटा को पार्स करने की आवश्यकता है end कॉलबैक

यह मेरा पूरा समाधान है जो किसी भी बेस 64 छवि प्रारूप को पढ़ सकता है और इसे डेटाबेस में उचित प्रारूप में सहेज सकता है:

  // Save base64 image to disk try { // Decoding base-64 image // Source: http://stackoverflow.com/questions/20267939/nodejs-write-base64-image-file function decodeBase64Image(dataString) { var matches = dataString.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/); var response = {}; if (matches.length !== 3) { return new Error('Invalid input string'); } response.type = matches[1]; response.data = new Buffer(matches[2], 'base64'); return response; } // Regular expression for image type: // This regular image extracts the "jpeg" from "image/jpeg" var imageTypeRegularExpression = /\/(.*?)$/; // Generate random string var crypto = require('crypto'); var seed = crypto.randomBytes(20); var uniqueSHA1String = crypto .createHash('sha1') .update(seed) .digest('hex'); var base64Data = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAZABkAAD/4Q3zaHR0cDovL25zLmFkb2JlLmN...'; var imageBuffer = decodeBase64Image(base64Data); var userUploadedFeedMessagesLocation = '../img/upload/feed/'; var uniqueRandomImageName = 'image-' + uniqueSHA1String; // This variable is actually an array which has 5 values, // The [1] value is the real image extension var imageTypeDetected = imageBuffer .type .match(imageTypeRegularExpression); var userUploadedImagePath = userUploadedFeedMessagesLocation + uniqueRandomImageName + '.' + imageTypeDetected[1]; // Save decoded binary image to disk try { require('fs').writeFile(userUploadedImagePath, imageBuffer.data, function() { console.log('DEBUG - feed:message: Saved to disk image attached by user:', userUploadedImagePath); }); } catch(error) { console.log('ERROR:', error); } } catch(error) { console.log('ERROR:', error); } 

अद्यतन करें

मुझे यह रोचक लिंक मिला है कि PHP में आपकी समस्या का समाधान कैसे करें । मुझे लगता है कि आप लिंक के रूप में दिखाए गए अनुसार space को बदलकर भूल गए हैं।

मैंने इस सर्कल को http://images-mediawiki-sites.thefullwiki.org/04/1/7/5/6204600836255205.png से नमूना लगाया है जो ऐसा दिखता है:

http://images-mediawiki-sites.thefullwiki.org/04/1/7/5/6204600836255205.png

इसके बाद मैं इसे http://www.greywyvern.com/code/php/binary2base64 के माध्यम से डाल दिया जो मुझे वापस लाया:

 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAAAAACPAi4CAAAAB3RJTUUH1QEHDxEhOnxCRgAAAAlwSFlzAAAK8AAACvABQqw0mAAAAXBJREFUeNrtV0FywzAIxJ3+K/pZyctKXqamji0htEik9qEHc3JkWC2LRPCS6Zh9HIy/AP4FwKf75iHEr6eU6Mt1WzIOFjFL7IFkYBx3zWBVkkeXAUCXwl1tvz2qdBLfJrzK7ixNUmVdTIAB8PMtxHgAsFNNkoExRKA+HocriOQAiC+1kShhACwSRGAEwPP96zYIoE8Pmph9qEWWKcCWRAfA/mkfJ0F6dSoA8KW3CRhn3ZHcW2is9VOsAgoqHblncAsyaCgcbqpUZQnWoGTcp/AnuwCoOUjhIvCvN59UBeoPZ/AYyLm3cWVAjxhpqREVaP0974iVwH51d4AVNaSC8TRNNYDQEFdlzDW9ob10YlvGQm0mQ+elSpcCCBtDgQD7cDFojdx7NIeHJkqi96cOGNkfZOroZsHtlPYoR7TOp3Vmfa5+49uoSSRyjfvc0A1kLx4KC6sNSeDieD1AWhrJLe0y+uy7b9GjP83l+m68AJ72AwSRPN5g7uwUAAAAAElFTkSuQmCC 

इस स्ट्रिंग को base64 सहेजा गया जो मैंने अपने कोड में से पढ़ा।

 var fs = require('fs'), data = fs.readFileSync('base64', 'utf8'), base64Data, binaryData; base64Data = data.replace(/^data:image\/png;base64,/, ""); base64Data += base64Data.replace('+', ' '); binaryData = new Buffer(base64Data, 'base64').toString('binary'); fs.writeFile("out.png", binaryData, "binary", function (err) { console.log(err); // writes out file without error, but it's not a valid image }); 

मुझे एक सर्कल वापस मिलती है, लेकिन मजेदार बात यह है कि फाइलसिस्टम बदल गया है:) …

समाप्त

जब आप वापस छवि पढ़ते हैं तो मुझे लगता है कि आपको सेटअप शीर्षलेख की आवश्यकता है

उदाहरण के लिए PHPPage से imagepng लें:

 <?php $im = imagecreatefrompng("test.png"); header('Content-Type: image/png'); imagepng($im); imagedestroy($im); ?> 

मुझे लगता है कि दूसरी पंक्ति header('Content-Type: image/png'); , ज़रूरी है कि आपकी छवि ब्राउज़र में प्रदर्शित नहीं होगी, लेकिन केवल बाइनरी डेटा का एक गुच्छा ब्राउज़र को दिखाया गया है।

एक्सप्रेस में आप बस नीचे की तरह कुछ का उपयोग करेंगे। मैं आपके gravatar को प्रदर्शित करने जा रहा हूं जो कि http://www.gravatar.com/avatar/cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG पर स्थित है और जब आप curl --head http://www.gravatar.com/avatar/cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG मैं केवल हेडर का अनुरोध करता हूं क्योंकि कंसोल को कर्ल के लिए द्विआधारी सामान का गुच्छा प्रदर्शित करता है (Google क्रोम तुरंत डाउनलोड करने के लिए जाता है):

 curl --head "http://www.gravatar.com/avatar/cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG" HTTP/1.1 200 OK Server: nginx Date: Wed, 03 Aug 2011 12:11:25 GMT Content-Type: image/jpeg Connection: keep-alive Last-Modified: Mon, 04 Oct 2010 11:54:22 GMT Content-Disposition: inline; filename="cabf735ce7b8b4471ef46ea54f71832d.jpeg" Access-Control-Allow-Origin: * Content-Length: 1258 X-Varnish: 2356636561 2352219240 Via: 1.1 varnish Expires: Wed, 03 Aug 2011 12:16:25 GMT Cache-Control: max-age=300 Source-Age: 1482 

 $ mkdir -p ~/tmp/6922728 $ cd ~/tmp/6922728/ $ touch app.js 

app.js

 var app = require('express').createServer(); app.get('/', function (req, res) { res.contentType('image/jpeg'); res.sendfile('cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG'); }); app.get('/binary', function (req, res) { res.sendfile('cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG'); }); app.listen(3000); $ wget "http://www.gravatar.com/avatar/cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG" $ node app.js 

बेस64 छवि को फ़ाइल में रूपांतरित करने और कुछ यादृच्छिक आईडी या नाम के रूप में सहेजने का आसान तरीका।

 // to create some random id or name for your image name const imgname = new Date().getTime().toString(); // to declare some path to store your converted image const path = yourpath.png // image takes from body which you uploaded const imgdata = req.body.image; // to convert base64 format into random filename const base64Data = imgdata.replace(/^data:([A-Za-z-+/]+);base64,/, ''); fs.writeFile(path, base64Data, 'base64', (err) => { console.log(err); }); // assigning converted image into your database req.body.coverImage = imgname 

मुझे बेस 64 एन्कोडेड छवियों को भी सहेजना था जो डेटा यूआरएल का हिस्सा हैं, इसलिए मैं इसे समाप्त करने के लिए एक छोटा एनपीएम मॉड्यूल बना रहा जब मैं (या किसी और को) इसे भविष्य में फिर से करना पड़ता। इसे ba64 कहा जाता है।

सीधे शब्दों में कहें, यह एक Base64 एन्कोडेड छवि के साथ डेटा यूआरएल लेता है और छवि को आपके फाइल सिस्टम में बचाता है। यह सिंक्रोनस या एसिंक्रोनस से बचा सकता है इसके पास दो सहायक कार्यों भी हैं, जिनमें से एक को छवि के फ़ाइल एक्सटेंशन प्राप्त करने के लिए, और दूसरी data: से बेस 64 एन्कोडिंग को अलग करने के लिए data: स्कीम उपसर्ग।

यहां एक उदाहरण है:

 var ba64 = require("ba64"), data_url = "data:image/jpeg;base64,[Base64 encoded image goes here]"; // Save the image synchronously. ba64.writeImageSync("myimage", data_url); // Saves myimage.jpeg. // Or save the image asynchronously. ba64.writeImage("myimage", data_url, function(err){ if (err) throw err; console.log("Image saved successfully"); // do stuff }); 

इसे स्थापित करें: npm i ba64 -S रेपो GitHub पर है: https://github.com/HarryStevens/ba64

पीएस यह बाद में मेरे साथ हुआ कि ba64 शायद मॉड्यूल के लिए एक बुरा नाम है क्योंकि लोग मान सकते हैं कि यह बेस 64 एन्कोडिंग और डीकोडिंग करता है, जो यह नहीं है (जो बहुत सारे मॉड्यूल हैं जो पहले से ही करते हैं)। ओह अच्छा।