content: {-# LANGUAGE OverloadedStrings #-}
  
  {- This example demonstrates an ability to stream in constant space content from a remote resource into an S3 object accessible publicly -}
  
  
  import qualified Aws
  import           Aws.Aws              (Configuration (..))
  import qualified Aws.S3               as S3
  import           Control.Applicative  ((<$>))
  import           Control.Monad.Trans.Resource
  import qualified Data.Text            as T
  import           Network.HTTP.Conduit (http, parseUrl, responseBody,
                                         newManager, tlsManagerSettings)
  import           System.Environment   (getArgs)
  
  main :: IO ()
  main = do
    maybeCreds <- Aws.loadCredentialsFromEnv
    case maybeCreds of
      Nothing -> do
        putStrLn "Please set the environment variables AWS_ACCESS_KEY_ID and AWS_ACCESS_KEY_SECRET"
      Just creds -> do
        args <- getArgs
        cfg <- Aws.dbgConfiguration
        let s3cfg = Aws.defServiceConfig :: S3.S3Configuration Aws.NormalQuery
  
        case args of
          [sourceUrl,destBucket,destObj] -> do
            request <- parseUrl sourceUrl
  	  mgr <- newManager tlsManagerSettings
            runResourceT $ do
              source <- responseBody <$> http request mgr
              let initiator b o = (S3.postInitiateMultipartUpload b o){S3.imuAcl = Just S3.AclPublicRead}
              S3.multipartUploadWithInitiator cfg{credentials = creds} s3cfg initiator mgr (T.pack destBucket) (T.pack destObj) source (10*1024*1024)
          _ -> do
            putStrLn "Usage: MultipartTransfer sourceUrl destinationBucket destinationObjectname"
  
  