In Network.HTTP.Conduit
verwendet, hat diese Art requestBodySourceIO
signature:Die Verfolgung der Länge, wenn requestBodySourceIO
Prelude Network.HTTP.Conduit Data.Conduit Control.Monad.Trans.Resource> :t requestBodySourceIO
requestBodySourceIO
:: GHC.Int.Int64
-> Source IO Data.ByteString.Internal.ByteString -> RequestBody
erstes Argument Körperlänge in Bytes. Was ist ein guter Weg, um es die Quelle von ByteString
zu übergeben, während die laufende Summe der Bytestring
bis jetzt gefüttert verfolgt? Dies wird helfen, am Ende der Anfrage zu bestimmen, wo die Länge, die an sie übergeben wurde, der Gesamtlänge der Bytestring
entspricht, die an sie übergeben wurde.
hmm, 'requestBodySourceIO' ist eine vordefinierte Funktion. Wird es hier nicht irgendwie überschrieben, oder schlägst du vor, einen neuen zu schreiben? Außerdem haben wir hier zu sinken, aber wie erhalten wir die Größe im obigen Code? Es scheint nur oben in 'requestBodySourceIO' verbraucht zu werden (vorausgesetzt, es kann irgendwie überschrieben werden), die' requestBody' zurückgeben muss. – Sal
Nun, das macht mehr Sinn! Ich muss immer noch diese Tippschecks machen. Davor fehlt mir noch ein Teil dieses Puzzles - wir übergeben 'mySource' an' requestBodySourceIO', was 'requestBody' zurückgibt. Wie erhalten wir die Länge daraus, nachdem 'requestBodySourceIO' beendet ist (was die Länge nicht zurückgibt)? Können wir parallel noch eine 'runConduit' auf' mySource' laufen lassen (eine Art 'T' Split im Stream, in dem wir diesen Stream an zwei verschiedene Funktionen weiterleiten)? Was wird ein effizienter Weg sein, dies zu tun? – Sal
Sie können die Antwort auch mit der endgültigen Version überschreiben, anstatt sie anzuhängen, wenn Sie möchten. – Sal