Dropup कैसे काम करता है
Dropup हेडलेस UI की अवधारणा पर बना है - यह सभी जटिल फाइल अपलोड लॉजिक को संभालता है जबकि आपको विजुअल प्रेजेंटेशन पर पूर्ण नियंत्रण देता है।
आर्किटेक्चर
┌─────────────────────────────────────────────────────────────┐
│ आपका React कंपोनेंट │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ ड्रॉप जोन │ │ फाइल सूची │ │ अपलोड बटन │ │
│ │ (आपका UI) │ │ (आपका UI) │ │ (आपका UI) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────────┬──────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ useDropup हुक ││
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌─────────┐ ││
│ │ │ सत्यापन │ │ स्टेट │ │ अपलोड │ │ प्लेटफॉर्म││
│ │ │ इंजन │ │ मैनेजर │ │ इंजन │ │ एडाप्टर │ ││
│ │ └───────────┘ └───────────┘ └───────────┘ └─────────┘ ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
मुख्य घटक
1. स्टेट मैनेजर
Dropup पूर्वानुमानित स्टेट मैनेजमेंट के लिए React के useReducer का उपयोग करता है:
- सभी फाइलों और उनकी स्थितियों को ट्रैक करता है
- ड्रैग स्टेट को मैनेज करता है
- अपलोड प्रगति को हैंडल करता है
- गणना किए गए मान प्रदान करता है
2. सत्यापन इंजन
फाइलों को जोड़ने से पहले, वे सत्यापन से गुजरती हैं:
const { files } = useDropup({
accept: 'image/*', // फाइल प्रकार सत्यापन
maxSize: 5 * 1024 * 1024, // अधिकतम फाइल आकार
minSize: 1024, // न्यूनतम फाइल आकार
maxFiles: 10, // फाइलों की अधिकतम संख्या
maxWidth: 4096, // अधिकतम छवि चौड़ाई
maxHeight: 4096, // अधिकतम छवि ऊंचाई
customRules: [ // कस्टम सत्यापन
(file) => file.name.length < 100 || 'फाइल का नाम बहुत लंबा है'
],
});
3. अपलोड इंजन
अपलोड इंजन संभालता है:
- सरल अपलोड (प्रति फाइल एक रिक्वेस्ट)
- खंडित अपलोड (बड़ी फाइलों को विभाजित करें)
- एक्सपोनेंशियल बैकऑफ के साथ पुनः प्रयास लॉजिक
- समवर्ती अपलोड प्रबंधन
- प्रगति ट्रैकिंग
4. प्लेटफॉर्म एडाप्टर
Dropup सभी प्लेटफॉर्म पर काम करता है:
- वेब - नेटिव ब्राउज़र APIs का उपयोग करता है
- React Native - नेटिव फाइल हैंडलिंग का उपयोग करता है
- SSR - सर्वर-साइड रेंडरिंग के लिए सुरक्षित
डेटा प्रवाह
उपयोगकर्ता क्रिया → सत्यापन → स्टेट अपडेट → अपलोड → कॉलबैक
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
फाइल स्वीकार/अस्वीकार files[] XHR/Fetch onComplete
चुनें/ड्रॉप अपडेट प्रगति onError
डिज़ाइन सिद्धांत
1. हेडलेस प्रथम
कोई बिल्ट-इन UI कंपोनेंट नहीं - आप जो चाहें वह बनाएं:
// आप पूरे UI को नियंत्रित करते हैं
<div {...getDropProps()}>
<YourCustomDropZone />
<input {...getInputProps()} />
</div>
2. टाइप सुरक्षा
व्यापक टाइप्स के साथ पूर्ण TypeScript सपोर्ट:
import type { DropupFile, UseDropupOptions } from '@samithahansaka/dropup';
const options: UseDropupOptions = {
accept: 'image/*',
onUploadComplete: (file: DropupFile) => {
console.log(file.uploadedUrl);
},
};
3. ट्री शेकेबल
केवल वही आयात करें जिसकी आपको आवश्यकता है:
// केवल कोर (~10KB)
import { useDropup } from '@samithahansaka/dropup';
// आवश्यकता होने पर क्लाउड सपोर्ट जोड़ें
import { createS3Uploader } from '@samithahansaka/dropup/cloud/s3';
// आवश्यकता होने पर छवि प्रसंस्करण जोड़ें
import { compressImage } from '@samithahansaka/dropup/image';
4. प्रगतिशील संवर्धन
सरल शुरू करें, आवश्यकतानुसार सुविधाएं जोड़ें:
// मूल उपयोग
const { files } = useDropup();
// सत्यापन जोड़ें
const { files } = useDropup({ maxSize: 10_000_000 });
// ऑटो-अपलोड जोड़ें
const { files } = useDropup({
maxSize: 10_000_000,
upload: { url: '/api/upload' },
autoUpload: true,
});
// क्लाउड स्टोरेज जोड़ें
const { files } = useDropup({
upload: createS3Uploader({ getPresignedUrl }),
});