Skip to content

Latest commit

 

History

History
221 lines (170 loc) · 6.97 KB

README.md

File metadata and controls

221 lines (170 loc) · 6.97 KB

Swift integration for Uploadcare

license swift Build Status

Uploadcare Swift integration handles uploads by wrapping Upload and REST APIs.

Check out demo.

Installation

Swift Package Manager

To use a stable version add a dependency to your Package.swift file:

dependencies: [
    .package(url: "https://github.com/uploadcare/uploadcare-swift.git", from: "0.1.0-alpha")
]

If you want to try the current dev version, add a dependency to your Package.swift file:

dependencies: [
    .package(url: "https://github.com/uploadcare/uploadcare-swift.git", branch("develop"))
]

Or you can just add it using Xcode: https://github.com/uploadcare/uploadcare-swift (select master branch)

Carthage

To use a stable version add a dependency to your Cartfile:

github "uploadcare/uploadcare-swift" "0.1.0-alpha"

To use current dev version:

github "uploadcare/uploadcare-swift" "develop"

Cocoapods

To use a stable version add a dependency to your Podfile:

pod 'Uploadcare', git: 'https://github.com/uploadcare/uploadcare-swift'

To use current dev version:

pod 'Uploadcare', git: 'https://github.com/uploadcare/uploadcare-swift', :branch => 'develop'

Initialization

Create your project in Uploadcare dashboard and copy its API keys from there.

let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY")
// secret key is optional. Initialization with secret key:
let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

Using Upload API

Direct uploads (API Reference)

guard let url = URL(string: "https://source.unsplash.com/random"), let data = try? Data(contentsOf: url) else { return }

uploadcare.uploadAPI.upload(files: ["some_random_name.jpg": data], store: .store) { (result, error) in
    if let error = error {
        print(error)
        return
    }

    guard let files = result else { return }			
    for file in files {
        print("uploaded file name: \(file.key) | file id: \(file.value)")
    }
}

Multipart uploads (API Reference)

Multipart Uploads are useful when you are dealing with files larger than 100MB or explicitly want to use accelerated uploads. Multipart Upload contains 3 steps:

  1. Start transaction
  2. Upload file chunks
  3. Complete transaction

You can use the upload method that will run all 3 steps for you:

guard let url = Bundle.main.url(forResource: "Mona_Lisa_23mb", withExtension: "jpg") else { return }
let fileForUploading = uploadcare.uploadAPI.file(withContentsOf: url)
fileForUploading?.upload(withName: "Mona_Lisa_big.jpg")

// or uploading with callback
fileForUploading.uploadFile(data, withName: "Mona_Lisa_big.jpg") { (file, error) in
    if let error = error {
        print(error)
        return
    }
    print(file ?? "")
}

Upload files from URLs (API Reference)

let url = URL(string: "https://source.unsplash.com/random")

let task1 = UploadFromURLTask(sourceUrl: url!)
// upload
uploadcare.uploadAPI.upload(task: task1) { [unowned self] (result, error) in
    if let error = error {
        print(error)
        return
    }
    print(result)
}

UploadFromURLTask is used to store upload parameters.

// Set parameters by accessing properties:
let task2 = UploadFromURLTask(sourceUrl: url!)
task2.store = .store

// Set parameters using chaining
let task3 = UploadFromURLTask(sourceUrl: url!)
    .checkURLDuplicates(true)
    .saveURLDuplicates(true)
    .store(.store)

Check the status of a file uploaded from URL (API Reference)

uploadcare.uploadAPI.uploadStatus(forToken: "UPLOAD_TOKEN") { (status, error) in
    if let error = error {
        print(error)
        return
    }
    print(status)
}

File info (API Reference)

uploadcare.uploadAPI.fileInfo(withFileId: "FILE_UUID") { (file, error) in
    if let error = error {
        print(error)
        return
    }
    print(info)
}

Create files group (API Reference)

Uploadcare lib provides 2 methods to create group.

  1. Provide files as an array of UploadedFile:
let files: [UploadedFile] = [file1,file2]
self.uploadcare.uploadAPI.createFilesGroup(files: files) { (response, error) in
    if let error = error {
        print(error)
        return
    }
    print(response)
}
  1. Provide an array of files UUIDs:
let filesIds: [String] = ["FILE_UUID1", "FILE_UUID2"]
self.uploadcare.uploadAPI.createFilesGroup(fileIds: filesIds) { (response, error) in
    if let error = error {
        print(error)
        return
    }
    print(response)
}

Files group info (API Reference)

uploadcare.uploadAPI.filesGroupInfo(groupId: "FILES_GROUP_ID") { (group, error) in
    if let error = error {
        print(error)
        return
    }
    print(group)
}

Useful links

Uploadcare documentation
Upload API reference
REST API reference
Changelog
Contributing guide
Security policy
Support