Node.js Base64图像解码和写入文件

我将这个Flex表单的内容(不要问为什么)发送到节点。 有一个名为“照片”,这是一个base64编码图像后参数。

照片的内容得到发送好。 问题是当我试图解码内容并将其写入文件。

var fs = require("fs"); fs.writeFile("arghhhh.jpg", new Buffer(request.body.photo, "base64").toString(), function(err) {}); 

我试过toString(“二进制”)。 但似乎节点不解码所有的内容。 它似乎只解码JPG头信息,剩下的。

任何人都可以帮我这个吗?

谢谢

尝试完全删除.toString() ,直接写入缓冲区。

这是我的完整解决scheme,它将读取任何base64图像格式,解码并将其保存在数据库中适当的格式:

  // 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); } 

删除.toString()

在这里你将base64解码到一个缓冲区,这很好,但是你把缓冲区转换成一个string。 这意味着它是一个string对象,其代码点是缓冲区的字节。