🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

Node.js API में फ़ाइल अपलोड को कैसे प्रबंधित करें: संपूर्ण 2026 मार्गदर्शिका

⏱️3 min read  ·  466 words

फ़ाइल अपलोड को सही ढंग से संभालने में फ़ाइल को स्वीकार करने से कहीं अधिक शामिल है – आपको सत्यापन, भंडारण रणनीति, सुरक्षा और अक्सर छवि प्रसंस्करण की आवश्यकता होती है। यह मार्गदर्शिका सरल स्थानीय संग्रहण से लेकर स्केलेबल क्लाउड अपलोड तक Node.js में मजबूत फ़ाइल अपलोड को कवर करती है।

📋 Table of Contents

  1. अपलोड रणनीतियाँ अवलोकन
  2. फ़ाइलों को ठीक से मान्य करें (केवल MIME प्रकार पर भरोसा न करें)
  3. एकाधिक फ़ाइलें और फ़ील्ड्स
  4. शार्प
  5. के साथ इमेज प्रोसेसिंग निर्धारित यूआरएल के साथ डायरेक्ट-टू-क्लाउड अपलोड (स्केल के लिए सर्वश्रेष्ठ)
  6. बड़ी फ़ाइलों और पैमाने के लिए, अपलोड को अपने सर्वर के माध्यम से रूट न करें – क्लाइंट को आपके बैकएंड द्वारा जेनरेट किए गए निर्धारित URL का उपयोग करके सीधे S3 पर अपलोड करने दें:
  7. सामग्री द्वारा फ़ाइल प्रकार को सत्यापित करें
  8. प्रश्न: क्या अपलोड मेरे सर्वर के माध्यम से या सीधे क्लाउड स्टोरेज पर जाना चाहिए?
  9. Node.js में फ़ाइल अपलोड को संभालने के लिए किसी फ़ाइल को स्वीकार करने से कहीं अधिक की आवश्यकता होती है।

अपलोड रणनीतियाँ अवलोकन

रणनीति के लिए सर्वश्रेष्ठ स्थानीय डिस्क भंडारण
छोटे ऐप्स, एकल सर्वर अपने सर्वर पर अपलोड करें, फिर क्लाउड
भंडारण से पहले प्रसंस्करण की आवश्यकता डायरेक्ट-टू-क्लाउड (निर्धारित यूआरएल)
बड़ी फ़ाइलें, पैमाना, सर्वोत्तम अभ्यास मल्टर के साथ बेसिक अपलोड

फ़ाइलों को ठीक से मान्य करें (केवल MIME प्रकार पर भरोसा न करें)

npm install multer
const multer = require('multer');
const path = require('path');

const storage = multer.diskStorage({
  destination: './uploads',
  filename: (req, file, cb) => {
    // Generate a safe, unique filename - never trust the client's name
    const unique = Date.now() + '-' + Math.round(Math.random() * 1e9);
    cb(null, unique + path.extname(file.originalname));
  },
});

const upload = multer({
  storage,
  limits: { fileSize: 5 * 1024 * 1024 },   // 5MB limit
  fileFilter: (req, file, cb) => {
    // Only allow specific types
    const allowed = ['image/jpeg', 'image/png', 'image/webp'];
    if (allowed.includes(file.mimetype)) {
      cb(null, true);
    } else {
      cb(new Error('Only JPEG, PNG, and WebP images allowed'));
    }
  },
});

app.post('/upload', upload.single('file'), (req, res) => {
  res.json({ filename: req.file.filename, size: req.file.size });
});

एकाधिक फ़ाइलें और फ़ील्ड्स

npm install file-type
const { fileTypeFromBuffer } = require('file-type');
const fs = require('fs').promises;

// The client-provided MIME type can be faked - verify actual content
async function validateFile(filePath) {
  const buffer = await fs.readFile(filePath);
  const type = await fileTypeFromBuffer(buffer);

  const allowed = ['image/jpeg', 'image/png', 'image/webp'];
  if (!type || !allowed.includes(type.mime)) {
    await fs.unlink(filePath);   // delete the invalid file
    throw new Error('Invalid file content');
  }
  return type;
}

शार्प

// Multiple files under one field
app.post('/gallery', upload.array('photos', 10), (req, res) => {
  const files = req.files.map(f => ({ filename: f.filename, size: f.size }));
  res.json({ uploaded: files });
});

// Different fields
const uploadFields = upload.fields([
  { name: 'avatar', maxCount: 1 },
  { name: 'documents', maxCount: 5 },
]);
app.post('/profile', uploadFields, (req, res) => {
  const avatar = req.files.avatar?.[0];
  const docs = req.files.documents || [];
  res.json({ avatar: avatar?.filename, docCount: docs.length });
});

के साथ इमेज प्रोसेसिंग निर्धारित यूआरएल के साथ डायरेक्ट-टू-क्लाउड अपलोड (स्केल के लिए सर्वश्रेष्ठ)

npm install sharp
const sharp = require('sharp');

// Resize and optimize uploaded images
async function processImage(inputPath, outputPath) {
  await sharp(inputPath)
    .resize(1200, 1200, { fit: 'inside', withoutEnlargement: true })
    .webp({ quality: 80 })       // convert to WebP, compress
    .toFile(outputPath);
}

// Generate a thumbnail
async function makeThumbnail(inputPath, thumbPath) {
  await sharp(inputPath)
    .resize(200, 200, { fit: 'cover' })
    .toFile(thumbPath);
}

बड़ी फ़ाइलों और पैमाने के लिए, अपलोड को अपने सर्वर के माध्यम से रूट न करें – क्लाइंट को आपके बैकएंड द्वारा जेनरेट किए गए निर्धारित URL का उपयोग करके सीधे S3 पर अपलोड करने दें:

सुरक्षा जाँच सूची

const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3');
const { getSignedUrl } = require('@aws-sdk/s3-request-presigner');

const s3 = new S3Client({ region: 'us-east-1' });

// Backend: generate a presigned upload URL
app.post('/upload-url', async (req, res) => {
  const { filename, contentType } = req.body;
  const key = `uploads/${Date.now()}-${filename}`;

  const command = new PutObjectCommand({
    Bucket: 'my-bucket',
    Key: key,
    ContentType: contentType,
  });
  const uploadUrl = await getSignedUrl(s3, command, { expiresIn: 300 });

  res.json({ uploadUrl, key });
});
// Frontend: upload directly to S3, bypassing your server
const { uploadUrl, key } = await fetch('/upload-url', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ filename: file.name, contentType: file.type }),
}).then(r => r.json());

await fetch(uploadUrl, {
  method: 'PUT',
  headers: { 'Content-Type': file.type },
  body: file,   // uploads straight to S3 - no server bottleneck
});

सामग्री द्वारा फ़ाइल प्रकार को सत्यापित करें

  • , न कि केवल ग्राहक का MIME प्रकार (जिसे नकली बनाया जा सकता है)फ़ाइल का आकार सीमित करें
  • प्रत्येक परत पर (मल्टर, नगनेक्स, क्लाउड)सुरक्षित फ़ाइल नाम उत्पन्न करें
  • — कभी भी क्लाइंट के फ़ाइल नाम का सीधे उपयोग न करें (पथ ट्रैवर्सल जोखिम)वेब रूट के बाहर स्टोर करें
  • या क्लाउड स्टोरेज में, सार्वजनिक-सेवा योग्य निर्देशिका में नहीं जो अपलोड निष्पादित कर सकेमैलवेयर के लिए स्कैन करें
  • यदि अविश्वसनीय उपयोगकर्ताओं से फ़ाइलें स्वीकार की जाती हैंउचित सामग्री-प्रकार और सामग्री-विस्थापन सेट करें
  • फ़ाइलें वापस परोसते समयअक्सर पूछे जाने वाले प्रश्न

प्रश्न: क्या अपलोड मेरे सर्वर के माध्यम से या सीधे क्लाउड स्टोरेज पर जाना चाहिए?

उ: छोटी फ़ाइलों के लिए या जब आपको पहले उन्हें अपने सर्वर (मल्टर) के माध्यम से संसाधित करने की आवश्यकता हो। बड़ी फ़ाइलों और स्केल के लिए, निर्धारित यूआरएल का उपयोग करें ताकि क्लाइंट सीधे S3 पर अपलोड करें – यह आपके सर्वर की बैंडविड्थ और आकार सीमाओं को बायपास करता है और स्केल को कहीं बेहतर बनाता है।
प्रश्न: मुझे ग्राहक के MIME प्रकार पर भरोसा क्यों नहीं करना चाहिए?

उ: सामग्री-प्रकार हेडर क्लाइंट-नियंत्रित है और आसानी से नकली है – एक हमलावर एक छवि के रूप में लेबल की गई दुर्भावनापूर्ण फ़ाइल अपलोड कर सकता है। वास्तविक फ़ाइल सामग्री को फ़ाइल-प्रकार जैसी लाइब्रेरी से सत्यापित करें, जो फ़ाइल के जादुई बाइट्स को पढ़ता है।
प्रश्न: मैं बहुत बड़े फ़ाइल अपलोड को कैसे संभाल सकता हूँ?

उत्तर: डायरेक्ट-टू-क्लाउड अपलोड (कोई सर्वर बाधा नहीं) के लिए निर्धारित यूआरएल का उपयोग करें, या बड़ी फ़ाइलों के लिए खंडित/पुनः प्रारंभ करने योग्य अपलोड लागू करें। यदि आपके सर्वर के माध्यम से रूट किया जा रहा है तो सभी परतों (मल्टर, नेगनेक्स, क्लाउड) पर आकार सीमा बढ़ाएँ, लेकिन बड़ी फ़ाइलों के लिए डायरेक्ट-टू-क्लाउड बेहतर है।
प्रश्न: मुझे अपलोड की गई फ़ाइलें कहां संग्रहित करनी चाहिए?

ए: स्केलेबिलिटी और विश्वसनीयता के लिए क्लाउड ऑब्जेक्ट स्टोरेज (एस 3, जीसीएस, आर 2) – आपके ऐप सर्वर की डिस्क पर नहीं (जो इंस्टेंसेस में स्केल नहीं करता है और सर्वर को बदलने पर खो जाता है)। छोटे सिंगल-सर्वर ऐप्स के लिए, स्थानीय डिस्क काम करती है लेकिन जैसे-जैसे आप बढ़ते हैं, क्लाउड स्टोरेज में स्थानांतरित होने की योजना है।
प्रश्न: मैं अपलोड की गई फ़ाइलों को निष्पादित होने से कैसे रोकूँ?

उ: अपलोड को वेब रूट के बाहर या क्लाउड स्टोरेज में संग्रहीत करें, यादृच्छिक फ़ाइल नाम उत्पन्न करें, सामग्री प्रकार को मान्य करें, और उचित हेडर (सामग्री-विस्थापन: डाउनलोड के लिए अनुलग्नक) के साथ फ़ाइलों की सेवा करें। उपयोगकर्ता अपलोड को कभी भी ऐसी निर्देशिका में संग्रहीत न करें जहां वेब सर्वर उन्हें स्क्रिप्ट के रूप में निष्पादित करेगा।
निष्कर्ष

Node.js में फ़ाइल अपलोड को संभालने के लिए किसी फ़ाइल को स्वीकार करने से कहीं अधिक की आवश्यकता होती है।

का प्रयोग करें आकार सीमा और प्रकार फ़िल्टरिंग के साथ सर्वर-साइड अपलोड के लिए मल्टीलर, वास्तविक सामग्री (क्लाइंट के एमआईएमई प्रकार नहीं) द्वारा फ़ाइलों को मान्य करें, और शार्पके साथ छवियों को संसाधित करें। . स्केल और बड़ी फ़ाइलों के लिए,का उपयोग करें ग्राहकों को सीधे क्लाउड स्टोरेज पर अपलोड करने की सुविधा देने के लिए निर्धारित यूआरएल, आपके सर्वर को बायपास करके। हमेशा सुरक्षा प्रथाओं का पालन करें: सामग्री को मान्य करें, आकार सीमित करें, सुरक्षित फ़ाइल नाम उत्पन्न करें, और फ़ाइलों को क्लाउड स्टोरेज में या वेब रूट के बाहर संग्रहीत करें। सही तरीके से अपलोड करने का अर्थ है सुविधा, प्रदर्शन और सुरक्षा को संतुलित करना – उचित सत्यापन के साथ डायरेक्ट-टू-क्लाउड अधिकांश अनुप्रयोगों के लिए आधुनिक सर्वोत्तम अभ्यास है।, आपके सर्वर को बायपास करके। हमेशा सुरक्षा प्रथाओं का पालन करें: सामग्री को मान्य करें, आकार सीमित करें, सुरक्षित फ़ाइल नाम उत्पन्न करें, और फ़ाइलों को क्लाउड स्टोरेज में या वेब रूट के बाहर संग्रहीत करें। सही तरीके से अपलोड करने का अर्थ है सुविधा, प्रदर्शन और सुरक्षा को संतुलित करना – उचित सत्यापन के साथ डायरेक्ट-टू-क्लाउड अधिकांश अनुप्रयोगों के लिए आधुनिक सर्वोत्तम अभ्यास है।

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা