Swiftpack.co - SwiftySwifty/liquid-aws-s3-driver as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by SwiftySwifty.
SwiftySwifty/liquid-aws-s3-driver 1.2.3
Forked from BinaryBirds/liquid-aws-s3-driver
⭐️ 0
🕓 2 weeks ago
.package(url: "https://github.com/SwiftySwifty/liquid-aws-s3-driver.git", from: "1.2.3")


AWS S3 driver implementation for the LiquidKit file storage solution, based on the Soto for AWS project.

LiquidKit and the AWS S3 driver is also compatible with Vapor 4 through the Liquid repository, that contains Vapor specific extensions.

Key resolution for S3 objects

Keys are being resolved using a the bucket and the region name, with the standard AWS structure:

  • url = "https://" + [bucket name] + ".s3-" + [region name] + "amazonaws.com/" + [key]

Alternatively you can use a custom endpoint. In that case the endpoint will be extended with the bucket name and key.

  • url = [custom endpoint] + [bucket name] + [key]



It is possible to configure credentials via multiple methods, by default the driver will try to load the credentials from the shared credential file.

You can read more about the configuration in the AWS SDK Swift readme.

To get started with a default shared credential file, place the following values into the ~/.aws/credentials file.

aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY

Usage with SwiftNIO

Add the required dependencies using SPM:

// swift-tools-version:5.3
import PackageDescription

let package = Package(
    name: "myProject",
    platforms: [
    dependencies: [
        .package(url: "https://github.com/binarybirds/liquid", from: "1.2.0"),
        .package(url: "https://github.com/binarybirds/liquid-aws-s3-driver", from: "1.2.0"),
    targets: [
        .target(name: "App", dependencies: [
            .product(name: "Liquid", package: "liquid"),
            .product(name: "LiquidAwsS3Driver", package: "liquid-aws-s3-driver"),

A basic usage example with SwiftNIO:

/// setup thread pool
let elg = MultiThreadedEventLoopGroup(numberOfThreads: 1)
let pool = NIOThreadPool(numberOfThreads: 1)

/// create fs  
let fileio = NonBlockingFileIO(threadPool: pool)
let storages = FileStorages(fileio: fileio)
storages.use(.awsS3(region: .uswest1, bucket: "testbucket"), as: .awsS3)
let fs = storages.fileStorage(.awsS3, logger: .init(label: "[test-logger]"), on: elg.next())!

/// test file upload
let key = "test.txt"
let data = Data("file storage test".utf8)
let res = try fs.upload(key: key, data: data).wait()

/// https://testbucket.s3-us-west-1.amazonaws.com/test.txt
let url = req.fs.resolve(key: key)

/// delete key
try req.fs.delete(key: key).wait()


Stars: 0
Last commit: 2 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics