Http Post F# 中的流而不读入字节数组
Http Post a Stream in F# without reading into a Byte Array
使用 C#,我可以使用 System.Net.Http
库来直接 post 流,如下所示:
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
允许您 post 二进制数据,但需要一个字节数组才能这样做,这意味着将流读入内存。我想避免这种情况,因为我 posting > 20Mb.
以功能上惯用的方式执行此操作将涉及某种 IO monad。由于 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
}
恕我直言,完全可以接受。
使用 C#,我可以使用 System.Net.Http
库来直接 post 流,如下所示:
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
允许您 post 二进制数据,但需要一个字节数组才能这样做,这意味着将流读入内存。我想避免这种情况,因为我 posting > 20Mb.
以功能上惯用的方式执行此操作将涉及某种 IO monad。由于 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
}
恕我直言,完全可以接受。