از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
آپلود فایلها در AWS S3 با Node.js بسیاری از نرمافزارها و برنامههای وب که امروزه میسازیم به نوعی میزبانی برای فایلها نیاز دارند – تصاویر، فاکتورها، فایلهای صوتی و غیره. روش سنتی ذخیرهسازی فایلها فقط ذخیره آنها بود. روی هارد دیسک سرور با این حال، ذخیره فایل ها در هارد دیسک سرور با …
سرفصلهای مطلب
معرفی
بسیاری از نرمافزارها و برنامههای وب که امروزه میسازیم به نوعی میزبانی برای فایلها – تصاویر، فاکتورها، فایلهای صوتی و غیره نیاز دارند. روش سنتی ذخیرهسازی فایلها فقط ذخیره آنها بود. روی هارد دیسک سرور با این حال، ذخیره فایلها در هارد دیسک سرور با محدودیتهایی مانند عدم امکان افزایش مقیاس، تخصیص فضا قبل از استفاده و قیمتهای بسیار بالاتر/غیر قابل انعطاف همراه است. ناگفته نماند، درخواست حجم عظیمی از تصاویر (به طور بالقوه بزرگ) واقعاً می تواند فشار وارد کند روی سرور.
برای تخلیه سرورها، توسعه دهندگان شروع به میزبانی فایل ها با ارائه دهندگان ذخیره سازی ابری کردند AWS S3، Google Cloud Storage، و غیره.
در این مقاله روش نوشتن کد Node.js برای آپلود فایل ها در S3 را به شما نشان خواهیم داد.
S3 چیست؟
S3 یا سرویس ذخیره سازی ساده، یک سرویس ذخیره سازی ابری است که توسط خدمات وب آمازون (AWS). با استفاده از S3 می توانید host هر تعداد فایل در حالی که فقط برای آنچه استفاده می کنید پرداخت می کنید.
S3 همچنین میزبانی چند منطقه ای را به مشتریان بر اساس منطقه خود ارائه می دهد و بنابراین قادر است فایل های درخواستی را با حداقل تاخیر واقعاً سریع سرویس دهد.
راه اندازی محیط زیست
اعتبارنامه AWS
برای شروع، باید آن را تولید کنید اعتبارنامه دسترسی کلید امنیتی AWS اولین. برای انجام این کار، وارد سیستم خود شوید کنسول مدیریت AWS.
کلیک روی نام کاربری شما:
سپس انتخاب کنید کلیدهای دسترسی -> کلید دسترسی جدید ایجاد کنید:
پس از آن می توانید یا کپی کنید دسترسی به شناسه کلید و کلید دسترسی مخفی از این پنجره یا می توانید آن را به صورت a دانلود کنید .CSV
فایل:
ایجاد یک سطل S3
اکنون بیایید یک سطل AWS S3 با دسترسی مناسب ایجاد کنیم. ما می توانیم این کار را با استفاده از مدیریت AWS انجام دهیم console یا با استفاده از Node.js.
برای ایجاد یک سطل S3 با استفاده از مدیریت console، با انتخاب سرویس S3 از منوی سرویس به سرویس S3 بروید:
انتخاب کنید “ایجاد سطل” و نام سطل خود و منطقه ای را که می خواهید وارد کنید host سطل شما اگر از قبل می دانید که اکثر کاربران شما از کدام منطقه می آیند، عاقلانه است که منطقه ای را تا حد امکان نزدیک به منطقه آنها انتخاب کنید. این تضمین میکند که فایلهای سرور در بازه زمانی بهینهتری ارائه میشوند.
نامی که برای سطل خود انتخاب می کنید باید یک نام منحصر به فرد در بین همه کاربران AWS باشد، بنابراین اگر نام در دسترس نیست، نام جدیدی را امتحان کنید:
جادوگر را دنبال کنید و مجوزها و سایر تنظیمات را بر اساس نیاز خود پیکربندی کنید.
برای ایجاد سطل با استفاده از Node.js، ابتدا باید محیط توسعه خود را تنظیم کنیم.
محیط توسعه
خب حالا بیایید با پیکربندی یک پروژه Node.js جدید با مثال خود شروع کنیم:
$ npm init
برای شروع استفاده از هر سرویس ابری AWS در Node.js، باید آن را نصب کنیم AWS SDK (کیت توسعه سیستم).
آن را با استفاده از مدیر بسته دلخواه خود نصب کنید – ما استفاده خواهیم کرد npm
:
$ npm i --save aws-sdk
پیاده سازی
ایجاد یک سطل S3
اگر قبلاً یک سطل به صورت دستی ایجاد کرده اید، می توانید از این قسمت صرف نظر کنید. اما اگر نه، بیایید یک فایل ایجاد کنیم، بگوییم: create-bucket.js
در دایرکتوری پروژه شما
وارد کنید aws-sdk
کتابخانه برای دسترسی به سطل S3:
const AWS = require('aws-sdk');
حالا بیایید سه ثابت را برای ذخیره تعریف کنیم ID
، SECRET
، و BUCKET_NAME
. اینها برای شناسایی و دسترسی به سطل ما استفاده می شوند:
// Enter copied or downloaded access ID and secret key here
const ID = '';
const SECRET = '';
// The name of the bucket that you have created
const BUCKET_NAME = 'test-bucket';
اکنون، باید رابط S3 را با عبور دادن کلیدهای دسترسی، مقداردهی اولیه کنیم:
const s3 = new AWS.S3({
accessKeyId: ID,
secretAccessKey: SECRET
});
با موفقیت آمیز بودن رابط S3، میتوانیم پیش برویم و سطل را ایجاد کنیم:
const params = {
Bucket: BUCKET_NAME,
CreateBucketConfiguration: {
// Set your region here
LocationConstraint: "eu-west-1"
}
};
s3.createBucket(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log('Bucket Created Successfully', data.Location);
});
در این مرحله می توانیم کد را اجرا کرده و آزمایش کنیم که آیا سطل ایجاد شده است یا خیر روی ابر:
$ node create-bucket.js
اگر اجرای کد با موفقیت انجام شود، باید پیام موفقیت را مشاهده کنید و به دنبال آن آدرس سطل را در خروجی مشاهده کنید:
Bucket Created Successfully http://test-bucket-2415soig.s3.amazonaws.com/
می توانید از داشبورد S3 خود دیدن کنید و مطمئن شوید که سطل ایجاد شده است:
برای مشاهده لیست کامل مناطق و سایر پارامترها، لطفاً نگاهی به آن بیندازید اسناد رسمی.
آپلود فایل ها
در این مرحله، اجازه دهید عملکرد آپلود فایل را پیاده سازی کنیم. در یک فایل جدید، به عنوان مثال upload.js
، import را aws-sdk
کتابخانه برای دسترسی به سطل S3 و fs
ماژول خواندن فایل ها از کامپیوتر:
const fs = require('fs');
const AWS = require('aws-sdk');
برای ذخیره باید سه ثابت تعریف کنیم ID
، SECRET
، و BUCKET_NAME
و کلاینت S3 را همانطور که قبلا انجام دادیم مقداردهی اولیه کنید.
حالا بیایید تابعی ایجاد کنیم که a را بپذیرد fileName
پارامتر، نشان دهنده فایلی است که می خواهیم آپلود کنیم:
const uploadFile = (fileName) => {
// Read content from the file
const fileContent = fs.readFileSync(fileName);
// Setting up S3 upload parameters
const params = {
Bucket: BUCKET_NAME,
Key: 'cat.jpg', // File name you want to save as in S3
Body: fileContent
};
// Uploading files to the bucket
s3.upload(params, function(err, data) {
if (err) {
throw err;
}
console.log(`File uploaded successfully. ${data.Location}`);
});
};
قبل از آپلود فایل، باید محتویات آن را به صورت بافر مطالعه کنیم. پس از خواندن آن، می توانیم پارامترهای مورد نیاز برای آپلود فایل را تعریف کنیم، مانند Bucket
، Key
، و Body
.
علاوه بر این سه پارامتر، لیست طولانی از پارامترهای اختیاری دیگر نیز وجود دارد. برای دریافت ایده از چیزهایی که می توانید برای یک فایل در حین آپلود تعریف کنید، در اینجا چند مورد مفید وجود دارد:
StorageClass
: کلاسی را که می خواهید شی را ذخیره کنید تعریف کنید. S3 برای ارائه سرویس سریع فایل در نظر گرفته شده است. اما در صورت عدم دسترسی مکرر به فایلها، میتوانید از کلاس ذخیرهسازی متفاوتی استفاده کنید. به عنوان مثال، اگر فایل هایی دارید که به سختی لمس می شوند، می توانید آنها را در “S3 Glacier Storage” ذخیره کنید، جایی که قیمت آن در مقایسه با “S3 Standard Storage” بسیار پایین است. اما در صورت نیاز، دسترسی به آن فایلها زمان بیشتری طول میکشد و با توافقنامه سطح خدمات متفاوتی پوشش داده میشود.ContentType
: نوع MIME تصویر را تنظیم می کند. نوع پیشفرض «دودویی/اکتت جریان» خواهد بود. افزودن یک نوع MIME مانند “image/jpeg” به مرورگرها و سایر سرویس گیرندگان HTTP کمک می کند تا نوع فایل را شناسایی کنند.ContentLength
: اندازه بدنه را بر حسب بایت تنظیم می کند، که اگر اندازه بدنه به طور خودکار قابل تعیین نباشد، بسیار مفید است.ContentLanguage
: این پارامتر را تنظیم کنید تا مشخص کند محتوا به کدام زبان است. این کار همچنین به مشتریان HTTP کمک می کند تا محتوا را شناسایی یا ترجمه کنند.
برای Bucket
پارامتر، ما از نام سطل خود استفاده خواهیم کرد، در حالی که برای Key
پارامتر ما نام فایلی را که می خواهیم به عنوان ذخیره کنیم و برای آن اضافه می کنیم Body
پارامتر، ما استفاده خواهیم کرد fileContent
.
با انجام این کار، می توانیم هر فایلی را با ارسال نام فایل به تابع آپلود کنیم:
uploadFile('cat.jpg');
می توانید جایگزین کنید cat.jpg
با نام فایلی که در همان دایرکتوری کد، مسیر فایل نسبی یا مسیر فایل مطلق وجود دارد.
در این مرحله، میتوانیم کد را اجرا کنیم و آزمایش کنیم که آیا کار میکند:
$ node upload.js
اگر همه چیز خوب است، باید خروجی مانند آنچه در زیر نشان داده شده است را با پیوندی به فایل خود که در آن ذخیره شده است، ببینید data.Location
:
File uploaded successfully. https://test-bucket-1242tsr.s3.ap-northeast-2.amazonaws.com/cat.jpg
اگر خطایی وجود داشته باشد باید نمایش داده شود روی را console همچنین.
علاوه بر این، می توانید به سطل خود در کنسول مدیریت AWS بروید و مطمئن شوید که فایل آپلود شده است.
نتیجه
برای تخلیه سرورهای برنامه ما، انتخاب محبوب توسعه دهندگان این است که host فایل ها با استفاده از ارائه دهندگان ذخیره سازی مانند AWS S3، Google Cloud Storage، و غیره. ما یک برنامه Node.js بسیار ساده ساخته ایم که آپلود فایل ها در S3 را با استفاده از رابط آن از طریق aws-sdk
مدول.
بسته به روی شما همچنین می توانید دسترسی عمومی به سطل یا فایل های خود را با استفاده از تنظیمات پیکربندی کنید console.
اگر میخواهید مثل همیشه با کد بازی کنید، میتوانید آن را پیدا کنید روی GitHub در این اصل.
(برچسبها برای ترجمه)# aws
منتشر شده در 1403-01-24 19:13:03