nodejs

پلتفرم NodeJS

(NodeJS Platform)

اتصال به ذخیره‌سازی ابری

بدون شک اتصال برنامه به یک ذخیره‌سازی ابری مطمئن برای نگهداری و ارائه فایل‌های استاتیک وب‌سایت یا داده‌های آپلود شده توسط کاربران، باعث اطمینان خاطر صاحبان کسب و کار و بهبود عملکرد برنامه‌ می‌شود.

فهرست عناوین:

در صورتی که تمایلی به خواندن آموزش متنی ندارید می‌توانید ویدیوی آموزشی زیر ‌را مشاهده کنید.

نصب AWS SDK

از آنجا که ذخیره‌سازی ابری لیارا یک سرویس Object storage سازگار با پروتکل S3 است، شما می‌توانید با استفاده از AWS SDK‌، در زبان‌ها و فریم‌ورک‌های مختلفی این فضای ذخیره‌سازی را مدیریت کنید. حال برای اتصال به ذخیره‌سازی ابری در NodeJS باید با اجرای دستور زیر، پکیج aws-sdk را نصب کنید.

npm install @aws-sdk/client-s3

تنظیم کلیدها

اگر باکت شما خصوصی باشد، برای دسترسی به باکت، نیاز به کلید دارید. برای ساخت کلید، به صفحه ذخیره‌سازی ابری بروید و طبق عکس‌ها کلید‌خود را بسازید.

به قسمت کلیدها رفته:

یک کلید جدید بسازید.

کلید‌های ساخته‌شده را کپی کنید. توجه داشته‌باشید که SECRET_KEY تنها یک بار نمایش داده می‌شود و پس از آن باید کلید را درجایی مطمئن ذخیره کنید.

تنظیم متغیر های محیطی

در این مرحله باید کلیدها، نام باکت و endpoint لیارا را در فایل .env ذخیره کنید

LIARA_ENDPOINT=<Liara Bucket Endpoint>
LIARA_BUCKET_NAME=<Bucket Name>
LIARA_ACCESS_KEY=<Access Key>
LIARA_SECRET_KEY=<Secret Key>

آپلود فایل با AWS SDK

نمونه کد جهت آپلود فایل:

const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3");
require("dotenv").config();

const client = new S3Client({
    region: "default",
	endpoint: process.env.LIARA_ENDPOINT,
	credentials: {
		accessKeyId: process.env.LIARA_ACCESS_KEY,
		secretAccessKey: process.env.LIARA_SECRET_KEY
	},
});

const params = {
	Body: "<Binary String>",
	Bucket: process.env.LIARA_BUCKET_NAME,
	Key: "objectkey",
};

// async/await
try {
  await client.send(new PutObjectCommand(params));
} catch (error) {
	console.log(error);
}

// callback
client.send(new PutObjectCommand(params), (error, data) => {
  if (error) {
    console.log(error);
  } else {
    console.log(data);
  }
});

دریافت فایل با AWS SDK

نمونه کد جهت دریافت فایل:

const { S3Client, GetObjectCommand } = require("@aws-sdk/client-s3");
require("dotenv").config();

const client = new S3Client({
    region: "default",
	endpoint: process.env.LIARA_ENDPOINT,
	credentials: {
		accessKeyId: process.env.LIARA_ACCESS_KEY,
		secretAccessKey: process.env.LIARA_SECRET_KEY
	},
});
const params = {
  Bucket: process.env(LIARA_BUCKET_NAME),
  Key: "objectkey"
};

// async/await
try {
  const data = await client.send(new GetObjectCommand(params));
  console.log(data.Body.toString());
} catch (error) {
  console.log(error);
}

// callback
client.send(new GetObjectCommand(params), (error, data) => {
  if (error) {
    console.log(error);
  } else {
    console.log(data.Body.toString());
  }
});

دریافت لینک دانلود فایل توسط AWS SDK

نمونه کد جهت دریافت لینک دانلود فایل:

const { S3Client, GetObjectCommand } = require("@aws-sdk/client-s3");
require("dotenv").config();

const client = new S3Client({
    region: "default",
	endpoint: process.env.LIARA_ENDPOINT,
	credentials: {
		accessKeyId: process.env.LIARA_ACCESS_KEY,
		secretAccessKey: process.env.LIARA_SECRET_KEY
	},
});
const params = {
  Bucket:  process.env(LIARA_BUCKET_NAME),
  Key: "objectkey",
  Expires: 60, // expires in 60 seconds
};

// async/await
const command = new GetObjectCommand(params);
const url = await client.getSignedUrl(command);

// callback
const command = new GetObjectCommand(params);

client.getSignedUrl(command, (error, url) => {
  if (error) {
    console.log(error);
  } else {
    console.log(url);
  }
});

دریافت لیست فایل‌های آپلود شده توسط AWS SDK

نمونه کد جهت دریافت لیست فایل‌های آپلود شده:

const { S3Client, ListObjectsV2Command } = require("@aws-sdk/client-s3");
require("dotenv").config();

const client = new S3Client({
    region: "default",
	endpoint: process.env.LIARA_ENDPOINT,
	credentials: {
		accessKeyId: process.env.LIARA_ACCESS_KEY,
		secretAccessKey: process.env.LIARA_SECRET_KEY
	},
});

const params = {
  Bucket: process.env.LIARA_BUCKET_NAME
};

// async/await
try {
  const data = await client.send(new ListObjectsV2Command(params));
  const files = data.Contents.map((file) => file.Key);
  console.log(files);
} catch (error) {
  console.log(error);
}

// callback
client.send(new ListObjectsV2Command(params), (error, data) => {
  if (error) {
    console.log(error);
  } else {
    const files = data.Contents.map((file) => file.Key);
    console.log(files);
  }
});

حذف فایل توسط AWS SDK

نمونه کد جهت حذف فایل:

const { S3Client, DeleteObjectCommand } = require("@aws-sdk/client-s3");
require("dotenv").config();

const client = new S3Client({
    region: "default",
	endpoint: process.env.LIARA_ENDPOINT,
	credentials: {
		accessKeyId: process.env.LIARA_ACCESS_KEY,
		secretAccessKey: process.env.LIARA_SECRET_KEY
	},
});

const params = {
  Bucket: process.env.LIARA_BUCKET_NAME,
  Key: "objectkey"
};

// async/await
try {
  await client.send(new DeleteObjectCommand(params));
  console.log("File deleted successfully");
} catch (error) {
  console.log(error);
}

// callback
client.send(new DeleteObjectCommand(params), (error, data) => {
  if (error) {
    console.log(error);
  } else {
    console.log("File deleted successfully");
  }
});

دریافت لیست باکت‌ها توسط AWS SDK

نمونه کد برای دریافت لیست باکت‌های ایجاد شده:

const { S3Client, ListBucketsCommand } = require("@aws-sdk/client-s3");
require("dotenv").config();

const client = new S3Client({
	region: "default",
	endpoint: process.env.LIARA_ENDPOINT,
	credentials: {
		accessKeyId: process.env.LIARA_ACCESS_KEY,
		secretAccessKey: process.env.LIARA_SECRET_KEY,
	},
});


client.send(new ListBucketsCommand({}), (error, data) => {
  if (error) {
    console.log(error);
  } else {
    const buckets = data.Buckets.map((bucket) => bucket.Name);
    console.log(buckets); // List of bucket names
  }
});

آپلود فایل از طریق multer-s3

نمونه کد برای آپلود فایل از طریق multer-s3:

import AWS from 'aws-sdk';
import multer from 'multer';
import express from 'express';
import multerS3 from 'multer-s3';

const config = {
  endpoint: process.env(LIARA_ENDPOINT),
  accessKeyId: process.env(LIARA_ACCESS_KEY),
  secretAccessKey: process.env(LIARA_SECRET_KEY),
  region: "default",
};

const app = express();
const s3 = new AWS.S3(config);

const upload = multer({
  storage: multerS3({
    s3,
    bucket: process.env(LIARA_BUCKET_NAME),
    key: function (req, file, cb) {
      console.log(file);
      cb(null, file.originalname);
    },
  }),
});


// route
app.post('/upload', upload.single('objectKey'), function (req, res) {
  console.log(req.file);

  return res.send({
    status: 'success',
    message: 'file uploaded!',
    url: {
      size: req.file.size,
      url: req.file.location,
      name: req.file.key,
      type: req.file.mimetype,
    },
  });
});


app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

شما می‌توانید برای کسب اطلاعات بیشتر، مثال‌ها و مستندات این پکیج را مطالعه کنید.

متوجه شدم، برو گام بعدی!
;