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");
const { getSignedUrl } = require("@aws-sdk/s3-request-presigner");
require("dotenv").config();

const filename = "example_filename.png"; // change this to your filename

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: filename,
};

const command = new GetObjectCommand(params);
getSignedUrl(client, command).then((url) => 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!');
});

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

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