Unofficial package for simple managing file operations hosted on "Digital Ocean Spaces" written in Typescript
I've created this package to ease working with spaces. Be more expressive then aws-sdk
. And to solve "quirks" aws-sdk
have (like uploading with mime-types, delete whole folder...)
npm i do-spaces
// commonJS
const Spaces = require('do-spaces').default;
// ES6 modules
import Spaces from 'do-spaces';
const spaces = new Spaces({
// under settings of bucket in digital ocean (e.g. nyc3.digitaloceanspaces.com)
endpoint: `<endpoint>`,
// in GLOBAL settings of digital ocean
accessKey: `<access_key>`,
// in GLOBAL settings of digital ocean
secret: `<secret>`,
// `https://<name_of_the_bucket>.<urlOfDigitalOcean>` (e.g. hello-world.nyc3.digitaloceanspaces.com so bucket is: hello-world );
bucket: `<name_of_the_bucket>`,
});
- every method takes optional
awsParams
to enhance/replace it's default configuration for underlying method. Configuration docs can be found here path
- string, path folder like (ending with/
)pathname
-- string, full path to file (e.g/test/image.png
)- all methods returns
Promise
const spaces = new Spaces({
endpoint: `<endpoint>`, // under settings of bucket in digital ocean
accessKey: `<access_key>`, // in GLOBAL settings of digital ocean
secret: `<secret>`, // in GLOBAL settings of digital ocean
bucket: `<name_of_the_bucket>`,
});
// ....
// `s3.putObject`
await spaces.createFolder({
path: `/some/test/path/`,
awsParams // optional - `s3.putObject`
});
// ....
// recursively removes all files in specified folder
await spaces.deleteFolder({
path: `/some/test/path/`,
awsListParams, //optional - used to list items before deleting - `s3.listObjects`
awsDeleteParams, // optional - used to delete `s3.deleteObjects`
});
// folders are automatically created, no need to create folders beforehand
// automatically determines mime-type
await spaces.uploadFile({
pathname: `/some/test/path/myfile.txt`,
privacy: "public-read", // 'private' | 'public-read' (DO supports only those)
file,// Blob, string...
awsParams // optional - `s3.putObject`
});
await spaces.downloadFile({
pathname: "/some/test/path/myfile.txt", // or link https://<bucket>.<endpoint>/path/to/file
awsParams // optional - `s3.getObject`
});
// if there are more then 1000 files you will receive in response `nextMarker`,
// to continue with listing
await spaces.listFiles({
maxFiles = 1000, // optional - default is 1000 (max allowed in DO/AWS)
path: `/some/test/path/` ,
nextMarker, // optional - from which path it should start listing (supplied)
awsParams, // optional - `s3.getObjects`
});
await spaces.copyFile({
pathname: "/test/newFile.txt",
copiedPathname: "/test/copied.txt",
privacy: "public-read", // 'private' | 'public-read'
fromBucket, // optional - different bucket name if copied from elsewhere
awsParams, // optional -`s3.copyObject`
});
await spaces.deleteFile({
pathname: "/test/remove_me.txt",
awsParams // optional `s3.deleteObject`
});