Base64 Nodejs 中的读取文件

IT技术 javascript node.js image base64 readfile
2021-03-01 15:49:50

我正在尝试从以 base64 编码的客户端读取图像。如何使用nodejs阅读?

我的代码:

// add to buffer base64 image
var encondedImage = new Buffer(image.name, 'base64');

fs.readFile(encondedImage, "base64", function(err, buffer){
    if ( err ) {
        console.log('In read file')
        console.log(err)
    } else {
        // check err
        lwip.open(buffer, 'jpg', function(err, image){
            console.log('in open')
            if ( err ) console.log(err)

            if ( image ) console.log(image)
            // check 'err'. use 'image'.
            // image.resize(...), etc.
        });
    }
})

但是,我收到了这个错误:

In read file
[Error: Path must be a string without null bytes.]
3个回答

最新和最好的方法来做到这一点:

Node 支持文件和缓冲区操作的base64编码

const fs = require('fs');
const contents = fs.readFileSync('/path/to/file.jpg', {encoding: 'base64'});

或者使用新的promises API

const fs = require('fs').promises;
const contents = await fs.readFile('/path/to/file.jpg', {encoding: 'base64'});

我认为以下示例演示了您需要的内容:我删除了链接,因为它已损坏。

文章的精髓就是这个代码部分:

var fs = require('fs');

// function to encode file data to base64 encoded string
function base64_encode(file) {
    // read binary data
    var bitmap = fs.readFileSync(file);
    // convert binary data to base64 encoded string
    return new Buffer(bitmap).toString('base64');
}

// function to create file from base64 encoded string
function base64_decode(base64str, file) {
    // create buffer object from base64 encoded string, it is important to tell the constructor that the string is base64 encoded
    var bitmap = new Buffer(base64str, 'base64');
    // write buffer to file
    fs.writeFileSync(file, bitmap);
    console.log('******** File created from base64 encoded string ********');
}

// convert image to base64 encoded string
var base64str = base64_encode('kitten.jpg');
console.log(base64str);
// convert base64 string back to image 
base64_decode(base64str, 'copy.jpg');
如果目标是创建 base64 编码的数据 URI,则解决方案有点不足。实际数据正确,但字符串缺少data:[<mediatype>][;base64],前缀。
2021-04-24 15:49:50
谢谢你的解释。现在我明白为什么我得到了反对票。
2021-04-25 15:49:50
new Buffer是多余的。fs.readFileSync如果未指定编码,则返回缓冲区。你可以做fs.readFileSync([..]).toString('BASE64')
2021-05-04 15:49:50
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会无效。
2021-05-11 15:49:50
@Gajus 你甚至可以走得更远。readFileSync 现在可以为您进行编码。做就是了fs.readFileSync('...', { encoding: 'BASE64' })
2021-05-19 15:49:50
var fs = require('fs');

function base64Encode(file) {
    var body = fs.readFileSync(file);
    return body.toString('base64');
}


var base64String = base64Encode('test.jpg');
console.log(base64String);