Используя fs2 (версия 1.0.4) и эффект кошки IO
, я могу транслировать URL в локальный файл,
import concurrent.ExecutionContext.Implicits.global
def download(spec: String, filename: String): Stream[IO, Unit] =
io.readInputStream((new URL(spec).openConnection.getInputStream), 4096, global, true)
.through(io.file.writeAll(Paths.get(filename), global))
Однако этот фрагмент кода не возвращает никакой информации о процессе, когда он завершен. Кроме того, помимо того, что я знаю, что операция прошла успешно или нет, я также хочу узнать, сколько байтов считывается, если операция прошла успешно. Я не хочу проверять новый размер файла, чтобы получить эту информацию. С другой стороны, если операция не удалась, я хочу знать, что является причиной сбоя.
Я попытался attempt
, но не смог разрешить последующие шаги, чтобы записать необработанные байты в новый файл. Пожалуйста, порекомендуйте. Спасибо