Http Опубликовать поток в F# без чтения в байтовый массив

С C# я могу использовать System.Net.Http Библиотека для публикации потока прямо так:

private async Task UploadFileAsync(Uri uri, string filename)
{
    using (var stream = File.OpenRead(filename))
    using (var client = new HttpClient())
    {
        await client.PostAsync(uri, new StreamContent(stream));
    }
}

Есть ли способ сделать это в F# функционально идиоматическим способом?

FSharp.Data.Http.Request позволяет публиковать двоичные данные, но для этого требуется байтовый массив, что означает чтение потока в память. Я хотел бы избежать этого, поскольку я отправляю> 20Mb.

1 ответ

Решение

Выполнение этого функционально идиоматическим способом потребовало бы некоторой монады ввода-вывода. Поскольку F# является языком смешанной парадигмы, например,

let uploadFile (uri: Uri) fileName =
    async {
        use stream = File.OpenRead fileName
        use client = new HttpClient()
        return! client.PostAsync(uri, new StreamContent(stream)) |> Async.AwaitTask
    }

вполне приемлемо ИМХО.

Другие вопросы по тегам