From d38e9a8c0aa35c3b8e5f418676275aa8bd5cc1ae Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Mon, 2 Jul 2012 11:21:02 +0300 Subject: [PATCH] FileUploadSource (#262) --- yesod-core/Yesod/Handler.hs | 1 + yesod-core/Yesod/Internal/Request.hs | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/yesod-core/Yesod/Handler.hs b/yesod-core/Yesod/Handler.hs index d371d16a..330e15cb 100644 --- a/yesod-core/Yesod/Handler.hs +++ b/yesod-core/Yesod/Handler.hs @@ -343,6 +343,7 @@ rbHelper upload = case upload of FileUploadMemory s -> rbHelper' s mkFileInfoLBS FileUploadDisk s -> rbHelper' s mkFileInfoFile + FileUploadSource s -> rbHelper' s mkFileInfoSource rbHelper' :: Sink S8.ByteString (ResourceT IO) x -> (Text -> Text -> x -> FileInfo) diff --git a/yesod-core/Yesod/Internal/Request.hs b/yesod-core/Yesod/Internal/Request.hs index 58238a0a..d23baaa7 100644 --- a/yesod-core/Yesod/Internal/Request.hs +++ b/yesod-core/Yesod/Internal/Request.hs @@ -11,6 +11,7 @@ module Yesod.Internal.Request , fileMove , mkFileInfoLBS , mkFileInfoFile + , mkFileInfoSource , FileUpload (..) -- The below are exported for testing. , randomString @@ -141,5 +142,9 @@ mkFileInfoLBS name ct lbs = FileInfo name ct (sourceList $ L.toChunks lbs) (\fp mkFileInfoFile :: Text -> Text -> FilePath -> FileInfo mkFileInfoFile name ct fp = FileInfo name ct (sourceFile fp) (\dst -> runResourceT $ sourceFile fp $$ sinkFile dst) +mkFileInfoSource :: Text -> Text -> Source (ResourceT IO) ByteString -> FileInfo +mkFileInfoSource name ct src = FileInfo name ct src (\dst -> runResourceT $ src $$ sinkFile dst) + data FileUpload = FileUploadMemory (Sink ByteString (ResourceT IO) L.ByteString) | FileUploadDisk (Sink ByteString (ResourceT IO) FilePath) + | FileUploadSource (Sink ByteString (ResourceT IO) (Source (ResourceT IO) ByteString))