如何在TypeScript Express服务器中对字符串进行Base64解码/编码

30
我有一个用TypeScript编写的Express服务器。
在浏览器上,atob()btoa()可以正常工作,在Node.js上也可以。
通常我们使用Buffer.from("some-string").toString('base64')将字符串编码为base64。
然而,当我用TypeScript编写代码时,似乎这种方法不起作用。我需要一些帮助。

1
这篇文章可能会有所帮助:https://stackabuse.com/encoding-and-decoding-base64-strings-in-node-js/ - uminder
3个回答

41

在Node中使用TypeScript:

import { Buffer } from "buffer";

const b64 = "SGVsbG8sIFdvcmxkIQ==";
const str = 'Hello, World!'

const decode = (str: string):string => Buffer.from(str, 'base64').toString('binary');
const encode = (str: string):string => Buffer.from(str, 'binary').toString('base64');

test('base64 decode', () => {
  expect(decode(b64)).toEqual(str)
});

test('base64 decode', () => {
  expect(encode(str)).toEqual(b64)
});

test('base64 encode/decode', () => {
  expect(decode(encode(str))).toEqual(str)
});

27

请使用btoa进行字符串编码。

console.log(btoa("abc")); // YWJj

使用atob函数对相同的字符串进行解码

console.log(atob("YWJj")); // abc


11
atob() 或 btoa() 抛出一个错误,因为 btoa 没有定义。我猜如果你在浏览器上托管这个代码,那么它可以正常工作。但是,作为一个 REST 服务器,这可能不起作用。 - Arnab Roy
1
我理解这个问题是否在浏览器中运行。我的解决方案是基于浏览器的,这非常好用。谢谢。 - K-Dawg
8
@deprecated — 请改用Buffer.from(data, 'base64')。 - Mo Zaatar

3
如果您在前端使用了 window.btoa(fileData)
注意:根据 zerkms 的反馈和阅读软件包代码后,似乎您可以手动执行此操作。但是我必须运行两次才能正常工作。我还尝试解码一张大图像。
然后在 Node.js 服务器上,您可以直接使用 Buffer:
const b64 = "SGVsbG8sIFdvcmxkIQ==";
const fileDataProcessed = Buffer.from(b64, 'base64').toString('binary')
const decodedData = Buffer(fileDataProcessed, 'base64')

// This is the code that you can now upload to your s3 bucket, or somewhere else.
console.log(decodedData);

2
真的没有必要使用第三方包。 - zerkms
@zerkms 如果您没有使用第三方软件包,那么您该如何实现它? - waz
4
b64以base64格式解码,转换成一个Buffer对象,再将其转换为字符串返回。 - zerkms
我真的很困惑——如果你需要一个字符串,你可以使用Buffer.from(b64, 'base64').toString('binary')。如果你需要缓冲区,你可以使用Buffer.from(b64, 'base64')。那么const decodedData = Buffer(fileDataProcessed, 'base64')有什么意义呢?它会产生无用的结果。 - zerkms
我的使用场景是将图像上传到AWS S3,但每次我上传除了我已经做过的东西以外的任何东西,它都无法正常工作。我不确定为什么。我和你一样困惑。 - waz
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接