nodejs

پلتفرم NodeJS

(NodeJS Platform)

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

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

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

نصب AWS SDK

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

npm i aws-sdk

تنظیم کلیدها

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

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

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

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

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

// async/await
try {
  await client.putObject(params).promise();
} catch (error) {
  console.log(error);
}

// callback
client.putObject(params, (err, data) => {
  if (err) console.error(err, err.stack);
  else console.log(data);
});

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

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

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

// async/await
try {
  const object = await client.getObject(params).promise();
  console.log(object)
} catch (error) {
  console.log(error);
}

// callback
client.getObject(params, (err, data) => {
  if (err) console.error(err, err.stack);
  else console.log(data);
});

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

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

const params = {
  Bucket:  process.env(LIARA_BUCKET_NAME),
  Key: "objectkey"
  Expires: 60, // expires in 60 seconds
};

// async/await
try {
  const object = await client.getSignedUrlPromise('getObject', params);
  console.log(object);
} catch (error) {
  console.log(error);
}

// callback
client.getSignedUrl('getObject', params, (err, data) => {
  if (err) console.error(err, err.stack);
  else console.log(data);
});

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

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

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

// async/await
try {
  const objects = await client.listObjectsV2(params).promise();
  console.log(objects);
} catch (error) {
  console.log(error);
}

// callback
client.listObjectsV2(params, (err, data) => {
  if (err) console.error(err, err.stack);
  else console.log(data);
});

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

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

const params = {
  Bucket: process.env(LIARA_BUCKET_NAME),
  Key: 'objectKey',
};

// async/await
try {
  await client.deleteObject(params).promise();
} catch (error) {
  console.log(error);
}

// callback
client.deleteObject(params, (err, data) => {
  if (err) console.error(err, err.stack);
  else console.log(data);
});

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

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

const AWS = require('aws-sdk');

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

const client = new AWS.S3(config);

client.listBuckets(
    (err, data) => {
        if (err) console.error(err, err.stack);
        else console.log(data);
    }
);

آپلود فایل از طریق 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!');
});

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

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