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
}
вполне приемлемо ИМХО.