Higher Quality, Stronger Performance, Increased Stability, Better Developer Experience, discover everything we've shipped recently!

Strapi plugin logo for Uploadthing

Uploadthing

Uploadthing provider for the Strapi uploads

@vivinkv28/strapi-provider-uploadthing

UploadThing provider for Strapi uploads.

This provider stores Strapi Media Library files in UploadThing, offering high-performance, seamless media uploads for Strapi v5 applications.


Requirements

  • Node.js >= 20.0.0
  • Strapi v5

Installation

Install the provider in your Strapi project:

npm install @vivinkv28/strapi-provider-uploadthing

Setup & Configuration

1. Environment Variables

Add your UploadThing token and optional configuration variables to your Strapi project's .env file:

# UploadThing Token (Required)
UPLOADTHING_TOKEN=your_uploadthing_token

# Optional Configurations
UPLOADTHING_ACL=public-read
UPLOADTHING_PRIVATE_FILES=false
UPLOADTHING_CONTENT_DISPOSITION=inline
UPLOADTHING_SIGNED_URL_EXPIRES_IN=3600
UPLOADTHING_UPLOAD_CONCURRENCY=1
UPLOADTHING_UPLOAD_RETRIES=2
UPLOADTHING_USE_CUSTOM_ID=true
UPLOADTHING_LOG_LEVEL=Info

2. Configure Plugin (./config/plugins.ts)

Enable and configure the upload provider in your plugins configuration file:

export default ({ env }) => ({
  upload: {
    config: {
      provider: '@vivinkv28/strapi-provider-uploadthing',
      providerOptions: {
        token: env('UPLOADTHING_TOKEN'),
        acl: env('UPLOADTHING_ACL', 'public-read'),
        privateFiles: env.bool('UPLOADTHING_PRIVATE_FILES', false),
        contentDisposition: env('UPLOADTHING_CONTENT_DISPOSITION', 'inline'),
        signedUrlExpiresIn: env.int('UPLOADTHING_SIGNED_URL_EXPIRES_IN', 3600),
        uploadConcurrency: env.int('UPLOADTHING_UPLOAD_CONCURRENCY', 1),
        uploadRetries: env.int('UPLOADTHING_UPLOAD_RETRIES', 2),
        useCustomId: env.bool('UPLOADTHING_USE_CUSTOM_ID', true),
        logLevel: env('UPLOADTHING_LOG_LEVEL', 'Info'),
      },
      actionOptions: {
        upload: {},
        uploadStream: {},
        delete: {},
      },
    },
  },
});

3. Configure Content Security Policy (./config/middlewares.ts)

To allow UploadThing-hosted media and images to render inside the Strapi Admin Panel and Media Library, update the contentSecurityPolicy directives in your security middleware:

import type { Core } from '@strapi/strapi';

const config: Core.Config.Middlewares = [
  'strapi::logger',
  'strapi::errors',
  {
    name: 'strapi::security',
    config: {
      contentSecurityPolicy: {
        useDefaults: true,
        directives: {
          'connect-src': ["'self'", 'https:'],
          'img-src': ["'self'", 'data:', 'blob:', 'https://*.ufs.sh', 'https://utfs.io'],
          'media-src': ["'self'", 'data:', 'blob:', 'https://*.ufs.sh', 'https://utfs.io'],
          upgradeInsecureRequests: null,
        },
      },
    },
  },
  'strapi::cors',
  'strapi::poweredBy',
  'strapi::query',
  'strapi::body',
  'strapi::session',
  'strapi::favicon',
  'strapi::public',
];

export default config;

Learn More

Install now

npm install @vivinkv28/strapi-provider-uploadthing

STATS

No GitHub star yetNot downloaded this week

Last updated

3 days ago

Strapi Version

Unavailable

Related plugin

Cloudinary Media Library

Useful links

Create your own plugin

Check out the available plugin resources that will help you to develop your plugin or provider and get it listed on the marketplace.