Packages
livebook
0.14.2
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/livebook_web/live/file_system_writer.ex
defmodule LivebookWeb.FileSystemWriter do
# Custom writer for live uploads, uploading directly using the
# `Livebook.FileSystem` abstraction.
#
# ## Options
#
# * `:file` (required) - `%Livebook.FileSystem.File{}` to upload
# the contents to
#
@behaviour Phoenix.LiveView.UploadWriter
alias Livebook.FileSystem
@impl true
def init(opts) do
file = Keyword.fetch!(opts, :file)
with {:ok, file_system} <- FileSystem.File.fetch_file_system(file),
{:ok, write_state} <- FileSystem.write_stream_init(file_system, file.path, []) do
{:ok, %{file: file, file_system: file_system, write_state: write_state}}
end
end
@impl true
def meta(state) do
%{file: state.file}
end
@impl true
def write_chunk(chunk, state) do
case FileSystem.write_stream_chunk(state.file_system, state.write_state, chunk) do
{:ok, write_state} -> {:ok, %{state | write_state: write_state}}
{:error, message} -> {:error, message, state}
end
end
@impl true
def close(state, :done) do
case FileSystem.write_stream_finish(state.file_system, state.write_state) do
:ok -> {:ok, state}
{:error, message} -> {:error, message}
end
end
def close(state, _reason) do
case FileSystem.write_stream_halt(state.file_system, state.write_state) do
:ok -> {:ok, state}
{:error, message} -> {:error, message}
end
end
end