本文以用一個在數據庫中保存圖片信息爲例, 展現如何向
Postgresql
中插入二進制數據.git
首先咱們要知道 Postgresql 中惟一一種二進制數據的類型爲 bytea
, 表示字節數組
或字節序列
. 對應於Oracle和MySQL中的 blob
.github
下面是一個示例sql
defmodule Bytea.Model.Test do import Ecto.Changeset use Ecto.Schema alias Bytea.Repo schema "tests" do field :photo, :binary timestamps() end def changeset(struct, params \\ %{}) do struct |> cast(params, [:photo]) |> validate_required([:photo]) end def insert(map) do Map.merge(%__MODULE__{}, map) |> Repo.insert end def test_insert do {:ok, contents} = File.read("/tmp/FB7D22A5-924E-4DA5-AC93-5D815FA1AEA8.png") insert(%{photo: contents}) end end
遷移腳本數據庫
defmodule Bytea.Repo.Migrations.CreateTest do use Ecto.Migration def change do create table(:tests) do # 這裏也能夠爲 :binary, 實際上在執行 mix ecto.migrate 數據庫中:photo字段的類型就是:bytea add :photo, :bytea timestamps() end end end
固然, 除了圖片文件之外, 你還能夠存儲其餘格式的二進制文件, 好比Word文檔, PDF文檔等等.segmentfault
mix phoenix.new bytea --no-brunch
建立項目, 提示下載依賴, 輸入 Y
數組
mix compile
編譯項目post
vi config/dev.exs
配置數據庫, 默認生成的用戶名和密碼都是postgres
,因此在測試的時候把你的數據庫用戶名和密碼設置成postgres
是很是方便的.測試
mix ecto.setup
建立數據庫和表, 這個命令其實是在mix.exs
中定義的別名,包含多個子命令ui
iex -S mix phoenix.server
啓動測試spa
https://github.com/developerw...
測試的時候能夠隨便找一個文件放到這個位置 "/tmp/FB7D22A5-924E-4DA5-AC93-5D815FA1AEA8.png"