{"id":26930232,"url":"https://github.com/dial-once/node-file-management","last_synced_at":"2025-04-02T06:17:34.230Z","repository":{"id":57235511,"uuid":"97697793","full_name":"dial-once/node-file-management","owner":"dial-once","description":"Simple file management via a provider like S3","archived":false,"fork":false,"pushed_at":"2018-11-20T17:34:04.000Z","size":56,"stargazers_count":4,"open_issues_count":2,"forks_count":2,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-04-29T10:22:53.170Z","etag":null,"topics":["amazon","dial-once","extensible","file-deletion","file-download","file-management","file-upload","multi-provider","s3","s3-storage","simple","streaming-data","streams"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/dial-once.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":null,"support":null}},"created_at":"2017-07-19T09:21:17.000Z","updated_at":"2023-09-08T17:27:38.000Z","dependencies_parsed_at":"2022-08-31T20:50:59.114Z","dependency_job_id":null,"html_url":"https://github.com/dial-once/node-file-management","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dial-once%2Fnode-file-management","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dial-once%2Fnode-file-management/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dial-once%2Fnode-file-management/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dial-once%2Fnode-file-management/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dial-once","download_url":"https://codeload.github.com/dial-once/node-file-management/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246763899,"owners_count":20829800,"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":["amazon","dial-once","extensible","file-deletion","file-download","file-management","file-upload","multi-provider","s3","s3-storage","simple","streaming-data","streams"],"created_at":"2025-04-02T06:17:33.711Z","updated_at":"2025-04-02T06:17:34.215Z","avatar_url":"https://github.com/dial-once.png","language":"JavaScript","readme":"# file-management\n[![Sonar](http://proxy.dialonce.net/sonar/api/badges/gate?key=file-management)](http://sonar.dialonce.net/dashboard?id=file-management)\n[![Sonar](http://proxy.dialonce.net/sonar/api/badges/measure?key=file-management\u0026metric=ncloc)](http://sonar.dialonce.net/dashboard?id=file-management)\n[![Sonar](http://proxy.dialonce.net/sonar/api/badges/measure?key=file-management\u0026metric=coverage)](http://sonar.dialonce.net/dashboard?id=file-management)\n[![Sonar](http://proxy.dialonce.net/sonar/api/badges/measure?key=file-management\u0026metric=code_smells)](http://proxy.dialonce.net/sonar/api/badges/measure?key=file-management\u0026metric=coverage)\n[![Sonar](http://proxy.dialonce.net/sonar/api/badges/measure?key=file-management\u0026metric=bugs)](http://sonar.dialonce.net/dashboard?id=file-management)\n[![Sonar](http://proxy.dialonce.net/sonar/api/badges/measure?key=file-management\u0026metric=sqale_debt_ratio)](http://sonar.dialonce.net/dashboard?id=file-management)\n\nLibrary for easy file storage and management supporting upload, downloads and deletes\n\n## Description\nIt relies on an abstract concept of provider to do the work needed. The only concrete implementation, for now, is that of the S3 provider\n\n## Tests\nTO run integration tests (test/integration dir) you must provide 'AWS_ACCESS_KEY_ID', AWS_SECRET_ACCESS_KEY and AWS_REGION env vars\n\n### Examples (S3):\n#### Upload (uploads a file to storage)\n```js\nconst fileManagement = require('file-management');\nconst fs = require('fs');\n\nconst testFileName = '\u003cyour file name\u003e';\nconst testLocation = 'dialonce-uploads/ci';\n\nconst manager = fileManagement.create('S3', {\n      auth: {\n        // AWS creds need to be provided\n        AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,\n        AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,\n        AWS_REGION: process.env.AWS_REGION,\n      },\n      // s3 options as needed\n      options: {}\n    });\n\n const stream = fs.createReadStream('\u003cpath to your file\u003e');\n      return manager\n      .uploadFile(testLocation, testFileName, stream)\n      .then((result) =\u003e {\n        console.log (result);\n      })\n      .catch(console.error);\n```\n\n#### Run cloudfront invalidation\n```js\nconst fileManagement = require('file-management');\nconst manager = fileManagement.create('S3', {\n  auth: {\n    // AWS creds need to be provided\n    AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,\n    AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,\n    AWS_REGION: process.env.AWS_REGION,\n  },\n  // s3 options as needed\n  options: {}\n});\n\nconst invalidationPaths = ['/css/*', '/img/*']; // ['/*'] by default\nconst distributionId = '123ABC456EFG' || process.env.CLOUDFRONT_DISTRIBUTION_ID;\n\nmanager.invalidate(invalidationPaths, distributionId)\n  .then((result) =\u003e {\n    console.log(result);\n  });\n```\n\n#### Download (Downloads a file from storage)\n```js\nconst fileManagement = require('file-management');\nconst fs = require('fs');\n\nconst testFileName = '\u003cyour file name\u003e';\nconst testLocation = 'dialonce-uploads/ci'; // S3 Bucket\n\nconst manager = fileManagement.create('S3', {\n      auth: {\n        // AWS creds need to be provided\n        AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,\n        AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,\n        AWS_REGION: process.env.AWS_REGION,\n      },\n      // s3 options as needed\n      options: {}\n    });\n\n  const stream = fs.createWriteStream(testFileName);\n       return manager\n       .downloadFile(testLocation, testFileName, stream)\n       .then(() =\u003e {\n         if (!fs.existsSync(testFileName)) {\n           throw new Error('File does not exist');\n         } else {\n           // all ok, file downloaded, delete it\n           fs.unlinkSync(testFileName);\n         }\n       });\n```\n#### Delete (deletes a file on storage)\n```js\nconst fileManagement = require('file-management');\n\nconst testFileName = '\u003cyour file name\u003e';\nconst testLocation = 'dialonce-uploads/ci'; // S3 Bucket\n\nconst manager = fileManagement.create('S3', {\n      auth: {\n        // AWS creds need to be provided\n        AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,\n        AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,\n        AWS_REGION: process.env.AWS_REGION,\n      },\n      // s3 options as needed\n      options: {}\n    });\n\n  manager\n    .deleteFile(testLocation, testFileName)\n    .then(() =\u003e {\n      console.log('File deleted!');\n    })\n    .catch(console.error);\n```\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdial-once%2Fnode-file-management","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdial-once%2Fnode-file-management","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdial-once%2Fnode-file-management/lists"}