nestjs-googledrive-upload
TypeScript icon, indicating that this package has built-in type declarations

2.0.0 • Public • Published

Google Drive Library for NestJS

This library provides a NestJS module for interacting with Google Drive. It includes a service for uploading and retrieving images.

Installation

Install the library with npm:

npm install nestjs-googledrive-upload

Usage

First, import GoogleDriveModule into your module:

import { GoogleDriveModule, GoogleDriveConfig } from 'nestjs-googledrive-up';

Watch this video for check how to get your Google Drive config.

import { GoogleDriveModule, GoogleDriveConfig } from 'nestjs-googledrive-upload';

@Module({
  imports: [
    GoogleDriveModule.register(
      {
        type: '...',
        project_id: '...',
        private_key_id: '...',
        private_key: '...',
        client_email: '...',
        client_id: '...',
        auth_uri: '...',
        token_uri: '...',
        auth_provider_x509_cert_url: '...',
        client_x509_cert_url: '...',
        universe_domain: '...',
      } as GoogleDriveConfig,
      'your-google-drive-folder-id',
    ),
    // other modules...
  ],
  // providers, controllers, etc...
})
export class YourModule {}

Or you can create json config file like below

Google Drive API example

{
  "type": "...",
  "project_id": "...",
  "private_key_id": "...",
  "private_key": "...",
  "client_email": "...",
  "client_id": "...",
  "auth_uri": "...",
  "token_uri": "...",
  "auth_provider_x509_cert_url": "...",
  "client_x509_cert_url": "...",
  "universe_domain": "..."
}

And change in your tsconfig

"compilerOptions": {
    "resolveJsonModule": true,
  }

.register

import * as config from 'src/testdir/config.json';

@Module({
  imports: [
    GoogleDriveModule.register(config as GoogleDriveConfig, 'your-google-drive-folder-id'),
  ],
})

.registerAsync

The registerAsync method in the GoogleDriveModule allows for registering the module asynchronously with the ability to dynamically configure the configuration.

Syntax

GoogleDriveModule.registerAsync(options: GoogleDriveModuleAsyncOptions): DynamicModule

Parameters:

  • options (GoogleDriveModuleAsyncOptions): The options object for asynchronously registering the module. It contains the following properties:
  • imports (optional): An array of NestJS modules that need to be imported before creating the GoogleDriveModule module.
  • useFactory: The function that will be invoked to asynchronously create the configuration. It should return an object configuration or a promise with the configuration object.
  • inject (optional): An array of dependencies to be injected into the useFactory function.

Usage

import { Module } from '@nestjs/common';
import { GoogleDriveModule } from 'nestjs-googledrive-upload';

@Module({
  imports: [
    GoogleDriveModule.registerAsync({
      imports: [], // Can import other modules if needed
      useFactory: async () => {
        // Your code to asynchronously fetch the configuration
        const config = await fetchConfigFromSomewhere();
        return config;
      },
    }),
  ],
})
export class AppModule {}

Then, you can use GoogleDriveService in your services:

import { Injectable } from '@nestjs/common';
import { GoogleDriveService } from 'nestjs-googledrive-upload';

@Injectable()
export class YourService {
  constructor(private readonly googleDriveService: GoogleDriveService) {}

  public async uploadImage(file: Express.Multer.File): Promise<string> {
    try {
      const link = await this.googleDriveService.uploadImage(file);
      // do something with the link, e.g., save it to the database
      return link;
    } catch (e) {
      throw new Error(e);
    }
  }

  public async getImage(fileId: string): Promise<string> {
    try {
      const link = await this.googleDriveService.getImage(fileId);
      // do something with the link, e.g., return it to the user
      return link;
    } catch (e) {
      throw new Error(e);
    }
  }
}

Package Sidebar

Install

npm i nestjs-googledrive-upload

Weekly Downloads

11

Version

2.0.0

License

MIT

Unpacked Size

251 kB

Total Files

34

Last publish

Collaborators

  • luvlqq