Erlang 如何处理Elixir中的base64编码文件?
我试图找出如何使用现有的JSON API,其中客户端正在上载base64编码的图像,例如:Erlang 如何处理Elixir中的base64编码文件?,erlang,elixir,phoenix-framework,Erlang,Elixir,Phoenix Framework,我试图找出如何使用现有的JSON API,其中客户端正在上载base64编码的图像,例如: 数据:图像/gif;base64,r0lgodlhaqabaaaaaaap///yh5baeaaaaaaaaaaaaaaaaaaaaibraa7 …并将其转换为文件,以便在arc库中使用它进行处理 您应该如何对其进行解码并将其转换为可用文件?看起来以下方法可能有效: {:ok, file} = File.open "test.gif", [:write] {:ok, image_string} = Bas
数据:图像/gif;base64,r0lgodlhaqabaaaaaaap///yh5baeaaaaaaaaaaaaaaaaaaaaibraa7
…并将其转换为文件,以便在arc
库中使用它进行处理
您应该如何对其进行解码并将其转换为可用文件?看起来以下方法可能有效:
{:ok, file} = File.open "test.gif", [:write]
{:ok, image_string} = Base.decode64("R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")
IO.binwrite file, image_string
我将把这个放在这里,以防有人有比这个更好的解决方案,但这似乎至少可以完成这项工作。第一步是提取基本数据。然后可以使用
Base.decode64/1
和File.write/2
如果保证只获取图像/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
这两个代码段都会将文件写入
a.gif
,您可以将其用于任何需要的用途。如果您想创建临时图像,我建议将它们存储在System.tmp_dir/1
中的某个位置,然后在使用后删除它们。我们现在可以使用base 64和Arc。请检查最新的源代码。
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