put package:http-streams

Place content on the server at the given URL via an HTTP PUT request, specifying the content type and a function to write the content to the supplied OutputStream. You might see:
put "http://s3.example.com/bucket42/object149" "text/plain"
(fileBody "hello.txt") (\p i -> do
putStr $ show p
Streams.connect i stdout)
Read from a pre-existing InputStream and pipe that through to the connection to the server. This is useful in the general case where something else has handed you stream to read from and you want to use it as the entity body for the request. You use this partially applied:
i <- getStreamFromVault                    -- magic, clearly
sendRequest c q (inputStreamBody i)
This function maps "Builder.fromByteString" over the input, which will be efficient if the ByteString chunks are large.
Build a piece of a multipart submission from an InputStream. You need to specify a field name for this piece of the submission, and can optionally indicate the MIME type and a filename (if what you are sending is going to be interpreted as a file).