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'})
.