package storage import ( "context" "io" "time" ) type Provider interface { Upload(ctx context.Context, key string, reader io.Reader, contentType string) error Download(ctx context.Context, key string, writer io.Writer) error DownloadToTemp(ctx context.Context, key string) (localPath string, cleanup func(), err error) Delete(ctx context.Context, key string) error Exists(ctx context.Context, key string) (bool, error) GetUploadURL(ctx context.Context, key string, contentType string, expires time.Duration) (string, error) GetDownloadURL(ctx context.Context, key string, expires time.Duration) (string, error) }