Dan*_*ary 8 f# fable-f# elmish
我正在尝试使用Fable-Elmish和React Helpers上传文件.但是,当我选择一个文件到可以使用Fetch发送到服务器的东西时,我无法弄清楚如何转换表单事件.这是观点:
R.input [
ClassName "input-control"
Type "file"
OnChange (fun x -> FileUploaded x.target |> dispatch )
] []
Run Code Online (Sandbox Code Playgroud)
我更新功能的相应部分:
| FileUploaded file ->
model, Cmd.ofPromise postCsv file FetchSuccess FetchFailure
Run Code Online (Sandbox Code Playgroud)
以及使用fetch调用api的函数:
let postData input =
let formData = FormData.Create()
formData.append("file.csv", input?files)
let defaultProps =
[ RequestProperties.Method HttpMethod.POST
; RequestProperties.Body (formData |> unbox)]
promise {
return! Fable.PowerPack.Fetch.fetch ("/api/data") defaultProps
}
Run Code Online (Sandbox Code Playgroud)
如何将React.FormEvent转换为获取所需的BodyInit?
事实证明我没有正确使用 FileList API。这是 post 方法的工作解决方案:
let postData input =
let formData = FormData.Create()
formData.append("file.csv", input?files?item(0))
let defaultProps =
[ RequestProperties.Method HttpMethod.POST
;RequestProperties.Headers [unbox EncType "multipart/form-data"]
; RequestProperties.Body (formData |> unbox)]
promise {
return! Fable.PowerPack.Fetch.fetch ("/api/data") defaultProps
}
Run Code Online (Sandbox Code Playgroud)