gpt4 book ai didi

byte - Http.get 中的 Elm 字节解码

转载 作者:行者123 更新时间:2023-12-05 01:37:54 24 4
gpt4 key购买 nike

我是 elm 的新手,遇到了有关使用后端数据填充模型的问题。我目前能够向服务器发出获取请求,返回一个字节[](数据是任何类型的图像、音频或视频),当仅通过例如 Html.img 显示此数据时,它工作正常。当我尝试使用 Http.get (src: https://package.elm-lang.org/packages/elm/http/latest/Http) 来填充我的模型时,它需要一个解码器。问题是,Bytes.Decode.bytes 需要一个 Int 来知道必须解码多少字节。所以我的问题是:有没有什么方法可以访问字节宽度,同时仍然匹配 Http.get 的类型模式?

这是我的问题的一个简单示例:


import Bytes exposing (Bytes)
import Bytes.Decode exposing (Decoder, bytes, decode)
import GeneralTypes exposing (Msg(..))
import Http

getMediaFromUrl : Cmd Msg
getMediaFromUrl = Http.get
{ url = "http://localhost:8090/image/2006/aa@a.de/session"
, expect = Http.expectBytes GetThumbnail decodeBytes
}

decodeBytes: Bytes.Bytes -> Decoder Bytes
decodeBytes bytesToDecode= let
fileSize =
bytesToDecode |> Bytes.width
in
Bytes.Decode.bytes fileSize
module GeneralTypes exposing (..)

import Bytes exposing (Bytes)
import Http

type Msg = GetThumbnail (Result Http.Error Bytes)

最佳答案

expectBytes 函数要求您指定一个字节解码器,如果您希望立即将字节转换为代码中更有意义的内容,这将非常有用。

但是,如果此时您想在应用程序中保留原始字节 而不必克隆或以其他方式读取字节,您可能会发现expectBytesResponse更有用。它有签名:

expectBytesResponse : (Result x a -> msg) -> (Response Bytes -> Result x a) -> Expect msg

这不会将解码器作为输入。它需要两个函数,让您将 Response Bytes 转换为 Result 和另一个函数(第一个参数),让您将 Result 转换为消息。通过这些步骤中的每一步,您都可以保留原始的 Bytes 引用,以供日后随意使用。

但是,您将不得不手动处理更多 HTTP 响应场景,但至少您可以完全控制如何处理您的字节。

关于byte - Http.get 中的 Elm 字节解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60383450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com