https://github.com/unixreaper/cloudflare-r2-sdk
A streamlined Node.js library for effortless integration and management of Cloudflare R2 Object Storage, simplifying cloud storage operations in your projects.
https://github.com/unixreaper/cloudflare-r2-sdk
Last synced: 4 months ago
JSON representation
A streamlined Node.js library for effortless integration and management of Cloudflare R2 Object Storage, simplifying cloud storage operations in your projects.
- Host: GitHub
- URL: https://github.com/unixreaper/cloudflare-r2-sdk
- Owner: unixreaper
- Created: 2024-07-09T02:08:51.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-07-09T05:20:33.000Z (11 months ago)
- Last Synced: 2025-01-23T14:11:11.929Z (5 months ago)
- Language: JavaScript
- Size: 8.79 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# r2-sdk
A streamlined Node.js library for effortless integration and management of Cloudflare R2 Object Storage, simplifying cloud storage operations in your projects.
## Installation
To install the library, use npm:
```sh
npm install cloudflare-r2-sdk
```## Documentation language support
Languages: `English` *current* | `ไทย` *coming soon*### Example Usage
**Declare the Client**
```js
const R2Client = require('cloudflare-r2-sdk');const objectStorageClient = new R2Client(
ACCOUNT_ID, // Your ACCOUNT_ID from Cloudflare R2 Dashboard
ACCESS_KEY_ID, // Your Access Key from Cloudflare R2 API
SECRET_ACCESS_KEY // Your Secret Key from Cloudflare R2 API
);
```**Upload the image object to bucket**
```js
const uploadResponse = await bucket.put(
bucketName: 'your-bucket-name',
keyName: 'img/image.jpg',
fileBuffer: buffer,
contentType: 'image/jpeg'
);console.log(uploadResponse);
```
**Reponse**
```json
{
"data": {
"success": true,
"statusCode": 200,
"expire": 604800, // in ms default is 7 days
"bucket": "company",
"keyname": "img/image.jpg", // your path EX. user/john/profile-icon.png = https://bucketurl/user/john/profile-icon.jpg
"url": "https://company.7492760310487df2252ef9441759c9a0.r2.cloudflarestorage.com/img/image.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=f525dac59ab797357113dcf3dedbdbca%2F20240709%2Fauto%2Fs3%2Faws4_request&X-Amz-Date=20240709T030506Z&X-Amz-Expires=604800&X-Amz-Signature=a15aaa3fb8162eb285e8d7eabf99253adee28dc22945c867e9c0cca959388936&X-Amz-SignedHeaders=host&x-id=GetObject", // temp url
"permanentURL": null, // Will appears when after you set a Custom Public Domain
"message": "Generated signed URL for object"
},
"status": 200,
"message": "Object has been uploaded successfully"
}
```**Get an Object URL**
```js
const objectURL = await objectStorageClient.getObjectURL({
bucketName: BUCKET_NAME,
keyName: 'img/image.jpg', // path inside bucket
expiresIn: 30 // Expires in MS
});console.log(objectURL);
```**Response**
```json
{
"success": true,
"statusCode": 200,
"expire": 30,
"bucket": "company",
"keyname": "img/image.jpg", // path inside bucket
"url": "https://company.7492760310487df2252ef9441759c9a0.r2.cloudflarestorage.com/img/image.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=f525dac59ab797357113dcf3dedbdbca%2F20240709%2Fauto%2Fs3%2Faws4_request&X-Amz-Date=20240709T024330Z&X-Amz-Expires=30&X-Amz-Signature=e4675c9df9e2c7a32989254f87e2cabe006dc057f291a4c231c788d51c10bc29&X-Amz-SignedHeaders=host&x-id=GetObject", // temp url
"permanentURL": null, // Will appears when after you set a Custom Public Domain
"message": "Generated signed URL for object"
}
```**Set a Custom Public Domain**
```js
objectStorageClient.setPublicDomain('https://r2.yourdomain.com');
```
**Get an Object URL with Custom Domain**
```js
const objectURL = await objectStorageClient.getObjectURL({
bucketName: BUCKET_NAME,
keyName: 'img/image.jpg', // path inside bucket
expiresIn: 30 // Expires in MS
});console.log(objectURL);
```
**Response with Custom Domain**
```json
{
"success": true,
"statusCode": 200,
"expire": 30,
"bucket": "company",
"keyname": "img/image.jpg", // path inside bucket
"url": "https://company.7492760310487df2252ef9441759c9a0.r2.cloudflarestorage.com/img/image.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=f525dac59ab797357113dcf3dedbdbca%2F20240709%2Fauto%2Fs3%2Faws4_request&X-Amz-Date=20240709T024330Z&X-Amz-Expires=30&X-Amz-Signature=e4675c9df9e2c7a32989254f87e2cabe006dc057f291a4c231c788d51c10bc29&X-Amz-SignedHeaders=host&x-id=GetObject",
"permanentURL": "https://r2.yourdomain.com/img/image.jpg", // <--- Your permanent URL
"message": "Generated signed URL for object"
}
```
**Check for latency**
```js
const latency = await objectStorageClient.ping();
console.log(latency);
```
**Response the latency**
```json
{ "success": true, "latency": 377, "message": "Ping successful" }
```
**Delete an object from the bucket**
```js
const deleteResponse = await objectStorageClient.deleteObject(
bucketName: 'your-bucket-name',
keyName: 'company-video.mp4' // path inside bucket
);console.log(deleteResponse);
```
**Reponse**
```json
{
"success": true,
"message": "Object has been deleted",
"statusCode": 204,
"attempts": 1,
"totalRetryDelay": 0,
"requestId": null,
"extendedRequestId": null,
"cfId": null
}
```
**List all the buckets**
```js
const listBuckets = await objectStorageClient.listBuckets();
console.log(listBuckets);
```
**Reponse**
```json
{
"buckets": [
{
"Name": "mybucket",
"CreationDate": "2024-03-29T09:50:42.147Z"
}
]
}
```
**List all the objects inside the bucket**
```js
const objectsInsideBucket = await bucket.listObjects(bucketName: 'mybucket');
console.log(objectsInsideBucket);
```
**Response**
```json
{
"objects": [
{
"Key": "web/icon/promotion.webp",
"LastModified": "2024-07-09T00:16:06.865Z",
"ETag": "\"d18a28a70c56bad694b175842e6985ef\"",
"Size": 64097,
"StorageClass": "STANDARD"
},
{
"Key": "employees/John/profile.jpg",
"LastModified": "2024-05-02T20:25:14.914Z",
"ETag": "\"c4f8dfd0d8bdbe7dd44374613bf9e8dc\"",
"Size": 34639,
"StorageClass": "STANDARD"
},
{
"Key": "marketing/present/company-presentation.mp4",
"LastModified": "2024-05-02T16:23:07.405Z",
"ETag": "\"2ae672014edaf6170298f7695abc155d\"",
"Size": 9526626,
"StorageClass": "STANDARD"
}
]
}
```