از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش دانلود تصویر از URL در Node.js
سرفصلهای مطلب
در دنیای Node.js، معمول است که نیاز به دانلود یک تصویر از URL برای اهداف مختلف داشته باشید. برای ایجاد حافظه پنهان، پیش پردازش تصاویر، یا صرفاً ذخیره آنها برای استفاده بعدی، درک روش انجام این کار برای هر توسعه دهنده ای که در محیط Node.js کار می کند یک مهارت ارزشمند است. در این مقاله، روش دانلود یک تصویر از URL در Node.js را با استفاده از syntax async/await بررسی خواهیم کرد. ما به روش بارگیری تصویر هم در یک فایل و هم در یک بافر نگاه خواهیم کرد، که امکان استفاده آسان تر در کار دیگر را فراهم می کند.
دانلود یک تصویر در یک فایل
ابتدا می بینیم که چگونه یک تصویر را در یک فایل دانلود کنیم. برای انجام این کار، فقط باید یک درخواست به آدرس تصویر ارسال کنیم و سپس پاسخ یک فایل را بنویسیم. این http
یا https
بسته به اینکه ماژول را می توان برای درخواست استفاده کرد روی پروتکل URL و fs
ماژول (File System) را می توان برای نوشتن پاسخ به یک فایل استفاده کرد.
با این حال، برای ساده کردن کارها، ما از آن استفاده خواهیم کرد axios
بسته برای ایجاد درخواست های HTTP زیرا به طور خودکار پروتکل صحیح را انتخاب می کند و خواندن کد ما را بسیار آسان تر می کند.
برای شروع، نصب کنید axios
با دویدن:
$ npm install axios
در مرحله بعد، اجازه دهید به یک تابع ساده نگاهی بیندازیم که یک تصویر را از یک URL دانلود می کند و آن را در یک فایل می نویسد:
const fs = require('fs');
const axios = require('axios');
async function downloadImage (url, imagePath) {
const response = await axios({
url,
method: 'GET',
responseType: 'stream'
});
const writer = fs.createWriteStream(imagePath);
response.data.pipe(writer);
return new Promise((resolve, reject) => {
writer.روی('finish', resolve);
writer.روی('error', reject);
});
}
در کد بالا، ما از آن استفاده می کنیم axios
برای ارسال درخواست GET به URL و مشخص کردن a responseType
از “جریان”. این می گوید axios
برای برگرداندن پاسخ به عنوان یک جریان، که سپس می توانیم آن را به جریان نوشتن فایل سیستم لوله کنیم (fs.createWriteStream
).
همچنین وعده ای را برمی گردانیم که پس از اتمام نوشتن فایل رفع می شود و در صورت بروز خطایی در طول فایل، رد می شود process. به این ترتیب ما می توانیم راحت تر از آن استفاده کنیم async
/await
نحو هنگام فراخوانی این تابع.
توجه داشته باشید: فراموش نکنید که این کد را در یک بلوک try-catch بپیچید تا به درستی خطاهای احتمالی را در طول درخواست یا نوشتن فایل مدیریت کنید. process.
دانلود تصویر در بافر
این process دانلود یک تصویر در بافر مشابه دانلود آن در یک فایل است، اما به جای لوله گذاری داده های پاسخ در یک فایل، آن را در یک بافر انباشته می کنیم. یک بافر می تواند به ویژه زمانی مفید باشد که می خواهید برخی از عملیات های دیگر را انجام دهید روی تصویر بلافاصله پس از دانلود آن
به تابع زیر دقت کنید:
const axios = require('axios');
async function downloadImageToBuffer(url) {
const response = await axios({
url,
method: 'GET',
responseType: 'arraybuffer'
});
const buffer = Buffer.from(response.data, 'binary');
return buffer;
}
در اینجا، ما تنظیم می کنیم responseType
به “arraybuffer” و سپس ایجاد یک بافر از داده های پاسخ. اکنون می توان از این بافر برای کارهای مختلفی مانند آپلود تصویر در سرور دیگری یا پردازش بیشتر آن استفاده کرد.
بافرها در Node.js ابزار قدرتمندی برای مدیریت داده های باینری هستند. آنها می توانند تکه های داده را به روشی کارآمد و آسان برای استفاده ذخیره و دستکاری کنند.
نتیجه
دانلود یک تصویر از یک URL در Node.js را می توان با سهولت نسبی با استفاده از axios
بسته و ماژول های داخلی Node.js. چه تصویر را در یک فایل برای استفاده بعدی ذخیره کنید یا مستقیماً آن را در یک بافر برای پردازش فوری دانلود کنید، درک روش انجام این وظایف بخش مهمی از کار با Node.js است. به یاد داشته باشید که همیشه خطاها را به درستی مدیریت کنید!
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-01-04 02:58:03