# Minio Haskell SDK API Reference ## Initialize Minio Client object. This SDK provides helpers to connect to play.minio.io (the public Minio Play server), the AWS S3 service, and to a locally hosted Minio server. For Play, use ```haskell minioPlayCI :: ConnectInfo minioPlayCI ``` For AWS S3, use ```haskell awsCI :: ConnectInfo awsCI { connectAccesskey = "your-access-key" , connectSecretkey = "your-secret-key" } ``` For a local Minio server instance running at `localhost:9000` with "minio" and "minio123" as access key and secret key respectively, use ``` haskell def :: ConnectInfo def ``` For a minio server instance deployed with custom configuration, use ``` haskell def :: ConnectInfo def { connectHost = "host" , connectPort = 5000 , connectAccessKey = "access-key" , connectSecretKey = "secret-key" , connectIsSecure = False } ``` |Bucket operations|Object Operations| |:---|:---| |[`makeBucket`](#makeBucket)|[`getObject`](#getObject)| |[`removeBucket`](#removeBucket)|[`putObject`](#putObject)| |[`listObjects`](#listObjects)|[`fGetObject`](#fGetObject)| |[`listIncompleteUploads`](#listIncompleteUploads)|[`fPutObject`](#fPutObject)| |[`listIncompleteParts`](#listIncompleteParts)|[`copyObject`](#copyObject)| ||[`removeObject`](#removeObject)| ## 1. ConnectInfo smart constructors ## 2. Bucket operations ### makeBucket :: Bucket -> Maybe Region -> Minio () Create a new bucket. If the region is not specified, the region specified by `ConnectInfo` is used. __Parameters__ In the expression `makeBucket bucketName region` the arguments are: | Param | Type | Description | |---|---|---| |`bucketName` | _Bucket_ (alias for `Text`) | Name of the bucket | | `region` | _Maybe Region_ | Region where the bucket is to be created. If not specified, default to the region in `ConnectInfo`.| __Example__ ``` haskell {-# Language OverloadedStrings #-} main :: IO () main = do res <- runResourceT $ runMinio minioPlayCI $ do makeBucket bucketName (Just "us-east-1") case res of Left err -> putStrLn $ "Failed to make bucket: " ++ (show res) Right _ -> putStrLn $ "makeBucket successful." ``` ### removeBucket :: Bucket -> Minio () Remove a bucket. The bucket must be empty or an error will be thrown. __Parameters__ In the expression `removeBucket bucketName` the arguments are: | Param | Type | Description | |---|---|---| |`bucketName` | _Bucket_ (alias for `Text`) | Name of the bucket | __Example__ ``` haskell {-# Language OverloadedStrings #-} main :: IO () main = do res <- runResourceT $ runMinio minioPlayCI $ do removeBucket "mybucket" case res of Left err -> putStrLn $ "Failed to remove bucket: " ++ (show res) Right _ -> putStrLn $ "removeBucket successful." ``` ### listObjects :: Bucket -> Maybe Text -> Bool -> C.Producer Minio ObjectInfo List objects in the given bucket. __Parameters__ In the expression `listObjects bucketName prefix recursive` the arguments are: |Param |Type |Description | |:---|:---| :---| | `bucketName` | _Bucket_ (alias for `Text`) | Name of the bucket | | `prefix` | _Maybe Text_ | Optional prefix that listed objects should have | | `recursive` | _Bool_ |`True` indicates recursive style listing and `False` indicates directory style listing delimited by '/'. | __Return Value__ |Return type |Description | |:---|:---| | _C.Producer Minio ObjectInfo_ | A Conduit Producer of `ObjectInfo` values corresponding to each incomplete multipart upload | __ObjectInfo record type__ |Field |Type |Description | |:---|:---| :---| |`oiObject` | _Object_ (alias for `Text`) | Name of object | |`oiModTime` | _UTCTime_ | Last modified time of the object | |`oiETag` | _ETag_ (alias for `Text`) | ETag of the object | |`oiSize` | _Int64_ | Size of the object in bytes | __Example__ ``` haskell import Data.Conduit ($$) import Conduit.Combinators (sinkList) main :: IO () main = do let bucket = "test" -- Performs a recursive listing of all objects under bucket "test" -- on play.minio.io. res <- runResourceT $ runMinio minioPlayCI $ do listObjects bucket Nothing True $$ sinkList print res ``` ### listIncompleteUploads :: Bucket -> Maybe Prefix -> Bool -> C.Producer Minio UploadInfo List incompletely uploaded objects. __Parameters__ In the expression `listIncompleteUploads bucketName prefix recursive` the parameters are: |Param |Type |Description | |:---|:---| :---| | `bucketName` | _Bucket_ (alias for `Text`) | Name of the bucket | | `prefix` | _Maybe Text_ | Optional prefix that listed objects should have. | | `recursive` | _Bool_ |`True` indicates recursive style listing and `Talse` indicates directory style listing delimited by '/'. | __Return Value__ |Return type |Description | |:---|:---| | _C.Producer Minio UploadInfo_ | A Conduit Producer of `UploadInfo` values corresponding to each incomplete multipart upload | __UploadInfo record type__ |Field |Type |Description | |:---|:---| :---| |`uiKey` | _Object_ |Name of incompletely uploaded object | |`uiUploadId` | _String_ |Upload ID of incompletely uploaded object | |`uiSize` | _Int64_ |Size of incompletely uploaded object | __Example__ ```haskell import Data.Conduit ($$) import Conduit.Combinators (sinkList) main :: IO () main = do let bucket = "test" -- Performs a recursive listing of all incompletely uploaded objects -- under bucket "test" on play.minio.io. res <- runResourceT $ runMinio minioPlayCI $ do listIncompleteUploads bucket Nothing True $$ sinkList print res ``` __Return Value__ |Return type |Description | |:---|:---| | _C.Producer Minio ObjectPartInfo_ | A Conduit Producer of `ObjectPartInfo` values corresponding to each completed part in the ongoing upload | __ObjectPartInfo record type__ |Field |Type |Description | |:---|:---| :---| |`opiNumber` | _PartNumber_ (alias for `Int16`) | Serial part number of the part| |`opiETag` | _ETag_ (alias for `Text`) | The ETag entity of the part | |`opiSize` | _Int64_ |Size of the part in the bytes | |`opiModTime` | _UTCTime_ | Last modified time | __Example__ ```haskell import Data.Conduit ($$) import Conduit.Combinators (sinkList) main :: IO () main = do let bucket = "test" -- Lists the parts in an incompletely uploaded object identified by -- bucket, object and upload ID. res <- runResourceT $ runMinio minioPlayCI $ do listIncompleteParts bucket "mpartObject" "xxxxx11111" $$ sinkList print res ``` ## 3. Object operations ### getObject :: Bucket -> Object -> Minio (C.ResumableSource Minio ByteString) Get an object from the service. __Parameters__ In the expression `getObject bucketName objectName` the parameters are: |Param |Type |Description | |:---|:---| :---| | `bucketName` | _Bucket_ (alias for `Text`) | Name of the bucket | | `objectName` | _Object_ (alias for `Text`) | Name of the object | __Return Value__ The return value can be incrementally read to process the contents of the object. |Return type |Description | |:---|:---| | _C.ResumableSource Minio ByteString_ | A Conduit ResumableSource of `ByteString` values. | __Example__ ```haskell import Data.Conduit ($$+-) import Data.Conduit.Binary (sinkLbs) main :: IO () main = do let bucket = "mybucket" object = "myobject" -- Lists the parts in an incompletely uploaded object identified by -- bucket, object and upload ID. res <- runResourceT $ runMinio minioPlayCI $ do source <- getObject bucket object src $$+- sinkLbs -- the following the prints the contents of the object. print res ``` ### putObject :: Bucket -> Object -> C.Producer Minio ByteString -> Maybe Int64 -> Minio () ### fGetObject :: Bucket -> Object -> FilePath -> Minio () ### fPutObject :: Bucket -> Object -> FilePath -> Minio () ### copyObject :: Bucket -> Object -> CopyPartSource -> Minio () ### removeObject :: Bucket -> Object -> Minio ()