f# - 使用 Suave 上传大文件?
问题描述
我想使用 Suave 上传文件。我知道小文件会自动写入/tmp
文件夹,但我的文件太大了。我想做的是将它们作为流处理并通过 Suave 服务器将它们发送到长期存储。
这是我的服务器:
#r "nuget: Suave"
open System.IO
open Suave
open Suave.Sockets
open Suave.Sockets.Control
let config = defaultConfig
let socketTask (conn : Connection, httpResult : HttpResult) =
socket {
printfn "Started socket task"
use stream = new TransportStream (conn.transport)
use reader = new StreamReader (stream)
while not reader.EndOfStream do
printfn "Reading... "
let! line = SocketOp.ofAsync (async {
let! line = reader.ReadLineAsync ()
return line
})
printfn "%s" line
printfn "Finished socket task"
return conn
}
let app : WebPart =
(fun ctx -> async {
printfn "Received request"
return
Some
{
ctx with
response =
{
ctx.response with
content = SocketTask socketTask
}
}
})
startWebServer config app
但是当我运行这个curl
命令时,它只是挂起:
$ curl -X POST --data-binary @big-file.csv localhost:8080
$ dotnet fsi ./Suave.fsx
[17:32:05 INF] Smooth! Suave listener started in 14.279ms with binding 127.0.0.1:8080
Received request
Started socket task
我希望上传的文件能够逐行打印。
我在这里想念什么?
解决方案
推荐阅读
- xampp - 我的问题是关于 XAMPP,它们在计算机上的服务是什么以及它为您的桌面提供什么服务
- sql - 如何摆脱实际上是“重复”的几乎相同的行,实际上只有一些列数据被切换?
- elasticsearch - 使用 Jenkins 上的 Logstash 作为 Jenkins 作业重新索引/更新 Elasticsearch
- pyalgotrade - 退出订单事件的 pyalgotrade 问题 (onExitOk)
- reactjs - 尝试运行使用 react-leaflet 显示的本地 tileserver 地图时出现跨域读取阻塞
- python - 如果数据在列表中,如何过滤请求中的数据?
- scala - 检查字符串是否包含列表中的任何项目
- angular - HttpErrorResponse: api url 的 Http 失败响应
- django - 我想将我的主键值存储到外键字段中
- bash - 从文件中而不是从目录中删除空格会引发错误