2016-06-12 49 views
1

我從下載谷歌雲存儲(https://cloud.google.com/storage/docs/json_api/v1/objects/get#parameters解鏈的文件與藥劑拋出:data_error

文件的二進制內容的文件是在響應主體返回。使用:zlib.uncompress拋出我

** (ErlangError) erlang error: :data_error 

我已經將其保存在磁盤上,然後手動抽取檢查了文件的內容。

是否有另一種方法來解壓elixir/erlang中的文件而不使用unix命令?

編輯:

檢查二進制文件給了我一個好

r.body |> inspect(binaries: :as_binaries) |> IO.puts 
<<31, 139, 8, 0, 0, 0, 0, 0, 0, 0, 212, 253, 91, 115, 27, 73, 178, 53, 10, 190, 207, 175, 104, 219, 207, 95, 193, 50, 174, 153, 57, 111, 188, 64, 36, 27, 44, 146, 6, 146, 170, 22, 95, 218, 212, 85, 234, 106, 157, 93, ...>> 
:ok 
+0

你可以試試':zip.uncompress(zipped_file)' – coderVishal

+0

@coderVishal有'未定義函數'。你有該模塊的文檔嗎? – paulorcdiniz

+0

你可以發佈一個鏈接到一個示例文件,所以我們可以嘗試解壓縮自己?如果它很短,只需在問題中包含這個輸出:'File.read(「the_file」)|>檢查(二進制文件::as_binaries)|> IO.puts'。 – Dogbert

回答

0

我明白了。從一個Erlang論壇(http://erlang.org/pipermail/erlang-questions/2009-November/047832.html)閱讀中,我找到了正確的步驟:

z = :zlib.open 
:zlib.inflateInit(z, 31) 
:zlib.inflate(z, result.body) 

謝謝大家!

+0

快速的問題:':zlib.gunzip(result.body)'工作嗎? – Dogbert

+0

@Dogbert奇怪,':zlib.gunzip'永遠不會返回。它會延伸 – paulorcdiniz

+0

這很奇怪,而且可能是一個錯誤 - 它應該返回未壓縮的數據或拋出錯誤,從不掛起。 – Dogbert

4

您可以嘗試使用zip從二郎。您正在尋找的功能是unzip

:zip.unzip(zipped_file) 
+0

不錯的一個!沒有工作,但現在錯誤更加明確:'{:error,:bad_eocd}' – paulorcdiniz

+0

也許這將有助於,http://stackoverflow.com/questions/12908409/erlang-zipunzip-1-error- bad-central-directory-and-error-bad-eocd – coderVishal

+1

這是正確的,謝謝,公牛的眼睛 –