diff --git a/antiope-s3.cabal b/antiope-s3.cabal
--- a/antiope-s3.cabal
+++ b/antiope-s3.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.2
 
 name:               antiope-s3
-version:            7.0.4
+version:            7.0.6
 synopsis:           Please see the README on Github at <https://github.com/arbor/antiope#readme>
 description:        Please see the README on Github at <https://github.com/arbor/antiope#readme>.
 category:           Services
@@ -31,6 +31,7 @@
       Antiope.S3.Range
       Antiope.S3.Request
       Antiope.S3.Strict
+      Antiope.S3.Syntax
       Antiope.S3.Types
   hs-source-dirs: src
   default-extensions: BangPatterns GeneralizedNewtypeDeriving OverloadedStrings TupleSections
diff --git a/src/Antiope/S3.hs b/src/Antiope/S3.hs
--- a/src/Antiope/S3.hs
+++ b/src/Antiope/S3.hs
@@ -3,7 +3,7 @@
 
 module Antiope.S3
 ( s3ObjectSource
-, putFile, putContent , putContent'
+, putFile, putFile', putContent , putContent'
 , copySingle
 , fromS3Uri
 , toS3Uri
@@ -71,8 +71,16 @@
   -> FilePath         -- ^ Source file path
   -> m (Maybe ETag)   -- ^ Etag when the operation is successful
 putFile b k f = do
-    req <- chunkedFile chunkSize f
-    view porsETag <$> AWS.send (putObject b k req)
+  req <- chunkedFile chunkSize f
+  view porsETag <$> AWS.send (putObject b k req)
+
+putFile' :: MonadAWS m
+  => S3Uri            -- ^ S3 URI
+  -> FilePath         -- ^ Source file path
+  -> m (Maybe ETag)   -- ^ Etag when the operation is successful
+putFile' (S3Uri b k) f = do
+  req <- chunkedFile chunkSize f
+  view porsETag <$> AWS.send (putObject b k req)
 
 putContent :: MonadAWS m
   => BucketName
diff --git a/src/Antiope/S3/Syntax.hs b/src/Antiope/S3/Syntax.hs
new file mode 100644
--- /dev/null
+++ b/src/Antiope/S3/Syntax.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE DataKinds        #-}
+{-# LANGUAGE TypeApplications #-}
+
+module Antiope.S3.Syntax
+  ( (</>)
+  ) where
+
+import Antiope.S3.Types
+import Control.Lens
+import Data.Generics.Product.Any
+import Data.Text                 (Text)
+
+-- | Append text to an S3Uri
+(</>) :: S3Uri -> Text -> S3Uri
+(</>) uri suffix = uri & the @"objectKey" . the @1 %~ (<> ("/" <> suffix))
