diff --git a/README.md b/README.md index 729762b..824f8ac 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,74 @@ stack haddock ``` +## Quick-Start Example - File Uploader + +### FileUploader.hs +``` haskell +#!/usr/bin/env stack +-- stack --resolver lts-6.27 runghc --package minio-hs --package optparse-applicative --package filepath + +{-# Language OverloadedStrings, ScopedTypeVariables #-} +import Network.Minio + +import Control.Monad.Catch (catch) +import Control.Monad.IO.Class (liftIO) +import Options.Applicative +import Prelude +import System.FilePath.Posix +import Data.Text (pack) + +-- | The following example uses minio's play server at +-- https://play.minio.io:9000. The endpoint and associated +-- credentials are provided via the libary constant, +-- +-- > minioPlayCI :: ConnectInfo +-- + +-- optparse-applicative package based command-line parsing. +fileNameOpts :: Parser FilePath +fileNameOpts = strOption + (long "filename" + <> metavar "FILENAME" + <> help "Name of file to upload to AWS S3 or a Minio server") + +cmdParser = info + (helper <*> fileNameOpts) + (fullDesc + <> progDesc "FileUploader" + <> header + "FileUploader - a simple file-uploader program using minio-hs") + + +main :: IO () +main = do + let bucket = "my-bucket" + + -- Parse command line argument, namely --filename. + filepath <- execParser cmdParser + let object = pack $ takeBaseName filepath + + res <- runResourceT $ runMinio minioPlayCI $ do + -- Make a bucket; catch bucket already exists exception if thrown. + catch + (makeBucket bucket Nothing) + (\(_ :: MError) -> liftIO $ putStrLn "Bucket already exists, proceeding with upload file.") + + -- Upload filepath to bucket; object is derived from filepath. + fPutObject bucket object filepath + + case res of + Left e -> putStrLn $ "file upload failed due to " ++ (show e) + Right () -> putStrLn "file upload succeeded." +``` + +### Run fileuploader + +``` sh +./FileUploader.hs --filename "path/to/my/file" + +``` + ## Contribute [Contributors Guide](https://github.com/minio/minio-hs/blob/master/CONTRIBUTING.md) diff --git a/examples/FileUploader.hs b/examples/FileUploader.hs new file mode 100755 index 0000000..d7cb1e3 --- /dev/null +++ b/examples/FileUploader.hs @@ -0,0 +1,55 @@ +#!/usr/bin/env stack +-- stack --resolver lts-6.27 runghc --package minio-hs --package optparse-applicative --package filepath + +{-# Language OverloadedStrings, ScopedTypeVariables #-} +import Network.Minio + +import Control.Monad.Catch (catch) +import Control.Monad.IO.Class (liftIO) +import Options.Applicative +import Prelude +import System.FilePath.Posix +import Data.Text (pack) + +-- | The following example uses minio's play server at +-- https://play.minio.io:9000. The endpoint and associated +-- credentials are provided via the libary constant, +-- +-- > minioPlayCI :: ConnectInfo +-- + +-- optparse-applicative package based command-line parsing. +fileNameOpts :: Parser FilePath +fileNameOpts = strOption + (long "filename" + <> metavar "FILENAME" + <> help "Name of file to upload to AWS S3 or a Minio server") + +cmdParser = info + (helper <*> fileNameOpts) + (fullDesc + <> progDesc "FileUploader" + <> header + "FileUploader - a simple file-uploader program using minio-hs") + + +main :: IO () +main = do + let bucket = "my-bucket" + + -- Parse command line argument, namely --filename. + filepath <- execParser cmdParser + let object = pack $ takeBaseName filepath + + res <- runResourceT $ runMinio minioPlayCI $ do + -- Make a bucket; catch bucket already exists exception if thrown. + catch + (makeBucket bucket Nothing) + (\(_ :: MError) -> liftIO $ putStrLn "Bucket already exists, proceeding with upload file.") + + -- Upload filepath to bucket; object is derived from filepath. + fPutObject bucket object filepath + + case res of + Left e -> putStrLn $ "file upload failed due to " ++ (show e) + Right () -> putStrLn "file upload succeeded."