Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 如何处理Elixir中的base64编码文件?_Erlang_Elixir_Phoenix Framework - Fatal编程技术网

Erlang 如何处理Elixir中的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

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

数据:图像/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