Custom Plugin
You can create your custom pluggable for Storage. This may be helpful if you want to integrate your app with a custom storage backend.
To create a plugin implement the StorageProvider interface:
import { Storage, StorageProvider } from 'aws-amplify';
export default class MyStorageProvider implements StorageProvider {    // category and provider name    static category = 'Storage';    static providerName = 'MyStorage';
    // you need to implement these seven methods    // configure your provider    configure(config: object): object;
    // copy object, optional    copy?(	    src: { key: string; identityId: string; level: 'public' | 'protected' | 'private' },	    dest: { key: string; level: 'public' | 'protected' | 'private' },	    options?    ): Promise<any>
    // get object/pre-signed url from storage    get(key: string, options?): Promise<String|Object>
    // upload storage object    put(key: string, object, options?): Promise<Object>
    // remove object    remove(key: string, options?): Promise<any>
    // list objects for the path    list(path, options?): Promise<any>
    // return 'Storage';    getCategory(): string;
    // return the name of you provider    getProviderName(): string;You can now register your pluggable:
// add the pluginStorage.addPluggable(new MyStorageProvider());
// get the pluginStorage.getPluggable(MyStorageProvider.providerName);
// remove the pluginStorage.removePluggable(MyStorageProvider.providerName);
// send configuration into AmplifyStorage.configure({  [MyStorageProvider.providerName]: {    // My Storage provider configuration  }});You can pass in your custom provider class to the Storage function to get Typescript support:
class MyStorageProvider implements StorageProvider {	...	get(key: string, config: { config1: number; }): Promise<{ key: string }>;}
// will automatically use the return type from the provider's function signatureconst getResult: Promise<{ key: string }> = Storage.get<MyStorageProvider>('key', {	provider: 'MyStorage',	config1: 123,});The default provider (Amazon S3) is in use when you call Storage.put( ) unless you specify a different provider: Storage.put(key, object, {provider: 'MyStorage'}).