如何在打字稿快递服务器中将字符串解码/编码为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的主要内容,如果未能解决你的问题,请参考以下文章
如何在打字稿中将存储在 Observable<any> 中的值转换为字符串?