如何在打字稿快递服务器中将字符串解码/编码为base64

Posted

技术标签:

【中文标题】如何在打字稿快递服务器中将字符串解码/编码为base64【英文标题】:How to decode/encode string to base64 in typescript express server 【发布时间】:2019-11-19 00:01:13 【问题描述】:

我有一个用 typescript 编写的快速服务器。

atob()btoa() 适用于浏览器和 Nodejs。

我们一般用

Buffer.from("some-string").toString('base64') 将字符串编码为 base64。

但是,当我在 TypeScript 中编写代码时,这似乎不起作用。我需要一些帮助。

【问题讨论】:

这篇文章可能会有所帮助:stackabuse.com/encoding-and-decoding-base64-strings-in-node-js 【参考方案1】:

请使用btoa 编码字符串

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

用于atob解码相同的字符串

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

【讨论】:

atob() 或 btoa() 由于未定义 btoa 而引发错误。如果您在浏览器上托管它,我想这会起作用。但是,作为 REST 服务器,这可能行不通。 我了解它是否在浏览器中运行的问题。我的解决方案是基于浏览器的,效果非常好。谢谢。 @deprecated — 改用 Buffer.from(data, 'base64')。【参考方案2】:

在节点打字稿中:

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

【讨论】:

【参考方案3】:

如果你在前端使用过window.btoa(fileData)

注意:在收到zerkms 的反馈并阅读了包装代码后,您似乎可以手动完成。但是我必须运行它两次才能工作。 我也在尝试解码一张大图。

那么在nodejs服务器上就可以直接使用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);

【讨论】:

确实没有理由使用 3rd 方包。 @zerkms 如果你不使用 3rd 方包,你是怎么做的? Buffer.from(b64, 'base64').toString() 你是对的。但是我不得不通过它两次。我会更新我的答案 我真的很困惑——如果你需要一个字符串,你可以使用Buffer.from(b64, 'base64').toString('binary')。如果您需要缓冲区 - 您可以使用Buffer.from(b64, 'base64')const decodedData = Buffer(fileDataProcessed, 'base64') 有什么意义?它会产生垃圾?

以上是关于如何在打字稿快递服务器中将字符串解码/编码为base64的主要内容,如果未能解决你的问题,请参考以下文章

在打字稿中将 JSON 转换为字符串数组

如何在打字稿中将存储在 Observable<any> 中的值转换为字符串?

如何在打字稿接口/类型中将枚举值类型转换为数组?

在javascript中将数字转换为数组| angular7的打字稿[重复]

在角度/打字稿中将类创建为可迭代

是否可以在打字稿中将某些内容标记为已弃用?