{"id":28466548,"url":"https://github.com/muhammadzadeh/nestorage","last_synced_at":"2025-06-29T21:31:37.159Z","repository":{"id":173743127,"uuid":"650945123","full_name":"muhammadzadeh/nestorage","owner":"muhammadzadeh","description":"NestJS Storage module, work with famous object storage like S3, R2, Azure, Google Cloud","archived":false,"fork":false,"pushed_at":"2024-02-27T18:30:13.000Z","size":829,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"development","last_synced_at":"2025-06-03T01:15:10.125Z","etag":null,"topics":["azure-storage","cloudflare-r2","gcloud","localstorage","minio","r2","s3","s3-storage"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/muhammadzadeh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-08T06:41:34.000Z","updated_at":"2024-11-24T15:06:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"7ee806b2-421a-47e7-aa68-0351377e774d","html_url":"https://github.com/muhammadzadeh/nestorage","commit_stats":null,"previous_names":["muhammadzadeh/nestjs-storage"],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muhammadzadeh%2Fnestorage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muhammadzadeh%2Fnestorage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muhammadzadeh%2Fnestorage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muhammadzadeh%2Fnestorage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/muhammadzadeh","download_url":"https://codeload.github.com/muhammadzadeh/nestorage/tar.gz/refs/heads/development","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muhammadzadeh%2Fnestorage/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":258407414,"owners_count":22695936,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["azure-storage","cloudflare-r2","gcloud","localstorage","minio","r2","s3","s3-storage"],"created_at":"2025-06-07T07:04:44.306Z","updated_at":"2025-06-29T21:31:37.152Z","avatar_url":"https://github.com/muhammadzadeh.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp  align=\"center\"\u003e\n\n\u003ca  href=\"http://nestjs.com/\"  target=\"blank\"\u003e\u003cimg  src=\"https://github-production-user-asset-6210df.s3.amazonaws.com/10474363/244793096-79f1d323-1808-4838-a0e1-cd5e23b18f91.svg\"  width=\"500\"  alt=\"Nestorage Logo\"  /\u003e\u003c/a\u003e\n\n\u003c/p\u003e\n\n\u003cp  align=\"center\"\u003e\n\nNestJS Storage module, work with famous object storage like S3, R2, Azure, Google Cloud\n\n\u003c/p\u003e\n\n## Installation\n\n```bash\nnpm i --save @muhammadzadeh/nestorage\n```\n\n## How To\n\n- select your preferred provider and provide its configs\n  - [local](#local-storage-example)\n  - [s3](#s3-storage-example)\n  - [r2](#r2-storage-example)\n  - [azure](#azure-storage-example)\n  - [gcs](#google-cloud-storage-example)\n- inject StorageService\n  - [StorageService](#storageservice)\n\n### Local Storage Example\n\n```typescript\n// app.module.ts\n\nimport { Module } from '@nestjs/common';\n\nimport { StorageModule } from '@muhammadzadeh/nestorage';\n\n@Module({\n  imports: [\n    StorageModule.forRoot({\n      provider: 'local',\n      options: {\n        root: 'ROOT_DIR',\n      },\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### S3 Storage Example\n\n```typescript\n// app.module.ts\n\nimport { Module } from '@nestjs/common';\n\nimport { StorageModule } from '@muhammadzadeh/nestorage';\n\n@Module({\n  imports: [\n    StorageModule.forRoot({\n      provider: 's3',\n      options: {\n        accessKeyId: 'ACCESS_KEY_ID',\n        secretAccessKey: 'SECRET_ACCESS_KEY',\n        endpoint: 'S3_ENDPOINT',\n        region: 'auto',\n      },\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### R2 Storage Example\n\n```typescript\n// app.module.ts\n\nimport { Module } from '@nestjs/common';\n\nimport { StorageModule } from '@muhammadzadeh/nestorage';\n\n@Module({\n  imports: [\n    StorageModule.forRoot({\n      provider: 'r2',\n      options: {\n        accessKeyId: 'ACCESS_KEY_ID',\n        secretAccessKey: 'SECRET_ACCESS_KEY',\n        endpoint: 'CLOUDFLARE_R2_EXAMPLE',\n        region: 'auto',\n      },\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### Azure Storage Example\n\n```typescript\n// app.module.ts\n\nimport { Module } from '@nestjs/common';\n\nimport { StorageModule } from '@muhammadzadeh/nestorage';\n\n@Module({\n  imports: [\n    StorageModule.forRoot({\n      provider: 'azure',\n      options: {\n        connectionString: 'CONNECTION_STRING ',\n      },\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### Google Cloud Storage Example\n\n```typescript\n// app.module.ts\n\nimport { Module } from '@nestjs/common';\n\nimport { StorageModule } from '@muhammadzadeh/nestorage';\n\n@Module({\n  imports: [\n    StorageModule.forRoot({\n      provider: 'gcs',\n      options: {\n        keyFilename: 'GOOGLE_KEY_FILE_NAME',\n      },\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### StorageService\n\n```typescript\nimport { Injectable, StreamableFile } from '@nestjs/common';\nimport { StorageService } from '@muhammadzadeh/nestorage';\n\n@Injectable()\nexport class MyClass {\n  constructor(private readonly storage: StorageService) {}\n\n  async uploadFile(file: Express.Multer.File) {\n    await this.storage.putObject(\n      'bucket',\n      'path/to/sub',\n      'my-file1.png',\n      file.buffer,\n    );\n  }\n\n  async DownloadFile() {\n    const buffer = await this.storage.getObject(\n      'bucket',\n      'path/to/sub',\n      'my-file.png',\n    );\n    return new StreamableFile(buffer, {\n      type: 'png',\n      length: buffer.length,\n      disposition: `attachment; filename=\"my-file.png\"`,\n    });\n  }\n}\n```\n\n## Todo\n\n- [ ] Add tests\n- [ ] Manage Buckets(create, delete, list)\n- [ ] Delete Object\n- [ ] Copy Object\n- [ ] Share Object\n\n## Support\n\nnestorage is an MIT-licensed open source project. If this library is helpful, please click star to support it.\n\n## License\n\nnestorage is MIT licensed.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuhammadzadeh%2Fnestorage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuhammadzadeh%2Fnestorage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuhammadzadeh%2Fnestorage/lists"}