你如何处理Elixir中的base64编码文件?

Jos*_*ith 2 erlang elixir phoenix-framework

我正在试图找出如何使用现有的JSON API,其中客户端正在上传base64编码的图像,例如:

data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7

...并将其转换为文件,以便在arc库中进行处理.

你应该怎么解码这个并把它变成一个可用的文件?

Dog*_*ert 10

第一步是提取Base 64数据.然后你可以使用Base.decode64!/1File.write!/2.

如果您保证只获得image/gif,您可以:

iex(1)> input = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
iex(2)> "data:image/gif;base64," <> raw = input
iex(3)> raw
"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
iex(4)> File.write!("a.gif", Base.decode64!(raw))
:ok
Run Code Online (Sandbox Code Playgroud)

或者,如果您只保证获得base64任何文件类型,您可以这样做:

iex(1)> input = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
iex(2)> {start, length} = :binary.match(input, ";base64,")
{14, 8}
iex(3)> raw = :binary.part(input, start + length, byte_size(input) - start - length)
"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
iex(4)> File.write!("a.gif", Base.decode64!(raw))
:ok
Run Code Online (Sandbox Code Playgroud)

这两个片段都会写入a.gif您可以使用的文件,无论您想要什么.如果你想创建临时图像,我建议将它们存储在里面System.tmp_dir/1,然后在使用后删除它们.