2016-08-19 4 views
1

私は、クライアントが、たとえば、base64でエンコードされた画像をアップロードしている既存のJSONのAPIを取る方法を把握しようとしている:Elixirでbase64でエンコードされたファイルをどのように扱いますか?

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

...と、それを使用するためにファイルにそれを回しますarcライブラリの処理用に

これをデコードして使用可能なファイルにする方法はありますか?以下は動作する可能性のように見えます

+0

ベース64をArcで使用することができます。 Plsは最新のソースコードをチェックします。 https://github.com/stavro/arc/pull/108 –

答えて

7

最初のステップは、Base64データを抽出することです。次に、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 

またはあなただけ、任意のファイルタイプに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 

これらの両方のスニペットはファイルをa.gifに書き込みます。これはあなたが好きなものに使うことができます。一時的なイメージを作成したい場合は、System.tmp_dir/1のどこかに格納し、使用後に削除することをお勧めします。

1

{:ok, file} = File.open "test.gif", [:write] 
{:ok, image_string} = Base.decode64("R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7") 
IO.binwrite file, image_string 

私はケースの誰かにここにこれを任せるつもりですが、これよりもよりよい解決策を持っているが、これは、少なくとも仕事をするように見えます。

関連する問題