Upload SDK

Providers Overview

Understand how Upload SDK prepares uploads for AWS S3 and ImageKit.

A provider is the integration between Upload SDK and a storage service.

It handles the provider-specific work needed to create a signed upload target.

Upload SDK currently includes providers for:

  • AWS S3
  • ImageKit

What a provider does

After Upload SDK validates the reported file information and generates a storage key, the selected provider:

  • Creates a signed upload policy or token
  • Chooses the provider upload endpoint
  • Adds the required multipart form fields
  • Applies constraints supported by that provider
  • Returns a short-lived prepared upload

For example:

const storageProfiles = defineStorageProfiles({
  uploads: awsS3({
    bucket: process.env.AWS_BUCKET!,
    region: process.env.AWS_REGION!,
    credentials: {
      accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
      secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
    },
  }),
});

Here, awsS3() is the provider integration.

The surrounding uploads name is the storage profile. Storage profiles are explained separately in Storage Profiles.

What changes between providers

Each provider uses its own signing method and upload fields.

AWS S3

AWS S3 creates a signed multipart POST policy.

The returned fields can include:

  • The object key
  • A signed policy
  • AWS signature fields
  • The declared content type
  • Metadata
  • Upload-size constraints

ImageKit

ImageKit creates a signed upload request.

The returned fields can include:

  • A filename and folder
  • A signed token
  • Expiration
  • MIME checks
  • Metadata
  • Overwrite settings

The exact configuration and returned fields are covered in each provider guide.

What stays the same

Your application uses the same SDK flow with both providers:

const preparedUpload = await uploader.prepareUpload(
  "avatar",
  input,
);

The client also follows the same multipart upload pattern:

const formData = new FormData();

for (const [name, value] of Object.entries(
  preparedUpload.fields,
)) {
  formData.append(name, value);
}

formData.append("file", file);

await fetch(preparedUpload.url, {
  method: preparedUpload.method,
  headers: preparedUpload.headers,
  body: formData,
});

The provider changes the returned URL and fields. The overall upload flow stays the same.

Keep provider credentials on the server

Provider configuration contains private credentials used to sign uploads.

Keep it in server-only code.

The client receives short-lived signed upload instructions, not your AWS or ImageKit private credentials.

Next steps

  • AWS S3: Configure S3 and understand its signed POST fields.

  • ImageKit: Configure ImageKit and understand its signed upload fields.

  • Storage Profiles: Organize provider configurations by name.

On this page