Lewati ke konten utama

Dropup

Pustaka React yang ringan dan headless untuk pengunggahan file

npm versionbundle sizelicense
10KB

Ringan

Paket inti kurang dari 10KB yang di-gzip. Tree-shakeable untuk ukuran optimal.

TS

TypeScript

Ditulis dalam TypeScript dengan definisi tipe yang komprehensif.

0

Tanpa Dependensi

Tanpa dependensi runtime. Hanya memerlukan React sebagai peer dependency.

Fitur

🎨

Desain Headless

Tidak ada komponen UI bawaan. Anda memiliki kontrol penuh atas tampilan dan nuansa. Bangun pengalaman pengunggahan persis seperti yang Anda inginkan.

📂

Seret & Lepas

Pemilihan file intuitif dengan seret dan lepas dengan umpan balik visual untuk tipe file yang valid dan tidak valid saat diseret.

📊

Progres Pengunggahan

Lacak progres real-time untuk file individual dan progres pengunggahan keseluruhan. Bangun indikator progres yang indah.

✅

Validasi File

Validasi bawaan untuk tipe file, ukuran, dan dimensi. Tambahkan aturan validasi kustom untuk kebutuhan khusus Anda.

☁️

Penyimpanan Cloud

Unggah langsung ke S3, Google Cloud Storage, Azure Blob, dan lainnya menggunakan URL yang sudah ditandatangani. Tidak perlu proxy server.

🔄

Pengunggahan Chunked

Pecah file besar menjadi chunk untuk pengunggahan yang andal. Dukungan untuk pengunggahan yang dapat dilanjutkan dengan protokol tus.

🖼️

Pemrosesan Gambar

Kompres, ubah ukuran, dan potong gambar sebelum diunggah. Perbaiki masalah orientasi EXIF secara otomatis.

📱

React Native

Bekerja di React Native dengan adapter native. API yang sama untuk aplikasi web dan mobile.

🌐

Aman untuk SSR

Bekerja mulus dengan Next.js, Remix, dan framework SSR lainnya. Tidak ada masalah hidrasi.

Mulai Cepat

1. Instalasi

npm install @samithahansaka/dropup

2. Penggunaan

import { useDropup } from '@samithahansaka/dropup';

function Uploader() {
const { files, actions, getDropProps, getInputProps } = useDropup({
accept: 'image/*',
upload: { url: '/api/upload' },
});

return (
<div {...getDropProps()}>
<input {...getInputProps()} />
<p>Drop files here</p>

{files.map(file => (
<div key={file.id}>
{file.name} - {file.progress}%
</div>
))}

<button onClick={() => actions.upload()}>Upload</button>
</div>
);
}