Packages
upstream
1.5.11-dev
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.0
1.8.2
1.8.1
1.7.2
1.7.1
1.7.0
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.12
1.5.11
1.5.11-dev-3
1.5.11-dev-2
1.5.11-dev-1
1.5.11-dev
1.5.10
1.5.9
1.5.8
1.5.7
1.5.6
1.5.5
1.5.2
1.5.1
1.5.0
1.4.12
1.4.9
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.7
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.3
1.2.1
Upstream is for integrating into projects that need to do large file uploads to B2 service. It integrates tightly with Backblaze B2 for now, with plans to support Amazon S3.
Current section
Files
Jump to
Current section
Files
lib/upstream/uploader/flow.ex
defmodule Upstream.Uploader.Flow do
@moduledoc """
Generates the chunks stream for Worker.File and Worker.LargeFile
"""
alias Upstream.Uploader.Checksum
alias Upstream.Worker.LargeFile.Status
def generate(stream, index, checksum_pid, status_pid \\ nil) do
last_bytes = get_last_bytes(stream)
Stream.flat_map(stream, fn bytes ->
Checksum.add_bytes_to_hash(bytes, checksum_pid)
if status_pid do
bytes
|> byte_size
|> Status.add_bytes_out(status_pid, index)
end
if bytes == last_bytes do
[bytes, Checksum.get_hash(checksum_pid)]
else
[bytes]
end
end)
end
defp get_last_bytes(stream) do
stream |> Stream.take(-1) |> Enum.to_list() |> List.first()
end
end