如何在sails.js中或通常在服务器端JavaScript中将图像转换为base64编码的数据URL?

Adi*_*lik 27 javascript node.js sails.js

我正在制作一个小应用程序sails.js,我需要将图像存储在数据库中.为此,我需要将图像转换为base64编码的数据URL,以便我可以将其保存为我的sails模型中的字符串.但是,我不知道如何以这种形式转换它.所有较早的问题都是关于将图像转换为base64编码的数据URL的问题,他们回答了有关在客户端进行此操作的问题.但是,我想在服务器端执行此操作,而我将通过发布请求获取图像.我怎样才能做到这一点?

ala*_*rev 64

据我所知,您想将文件转换为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');
}
Run Code Online (Sandbox Code Playgroud)

用法:

var base64str = base64_encode('kitten.jpg');
Run Code Online (Sandbox Code Playgroud)

资源

  • 不要忘记添加数据URI前缀:`data:[<mediatype>] [; base64],`例如:`data:image/png; base64,`如果是PNG图像.更多信息:[MDN上的数据URI](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) (9认同)
  • 不推荐使用新的Buffer().您可以使用fs.readFileSync(file,{encoding:'base64'}); (6认同)
  • 如果未通过编码,`fs.readFile`将提供缓冲区,因此不需要`new Buffer()`。[相关文档](https://nodejs.org/api/fs.html#fs_fs_readfile_file_options_callback)。 (3认同)

JSO*_*C11 41

它可以通过readFileSync实现,将图像路径作为第一个参数传递,将编码选项作为第二个参数传递.如下所示:

var fs = require('fs');

var imageAsBase64 = fs.readFileSync('./your-image.png', 'base64');
Run Code Online (Sandbox Code Playgroud)

根据节点文档:

fs.readFileSync(path [,options])

fs.readFile()的同步版本.返回路径的内容.

如果指定了encoding选项,则此函数返回一个字符串.否则它返回一个缓冲区.

  • 您还可以导入 `fs` 的 promisify 版本,如下所示 `import fs from 'fs/promises';` (3认同)