跳至主要內容

Dropup

輕量級無樣式的 React 檔案上傳函式庫

npm versionbundle sizelicense
10KB

輕量級

核心套件壓縮後小於 10KB。可進行樹搖優化以達到最佳大小。

TS

TypeScript

以 TypeScript 撰寫,具有完整的型別定義。

0

零相依性

無執行時相依性。僅需要 React 作為對等相依性。

功能特色

🎨

無樣式設計

無內建 UI 元件。您可以完全控制外觀和感覺。打造您想要的上傳體驗。

📂

拖放功能

直覺的拖放檔案選擇,在拖曳時提供有效和無效檔案類型的視覺回饋。

📊

上傳進度

即時追蹤個別檔案進度和整體上傳進度。打造美觀的進度指示器。

檔案驗證

內建檔案類型、大小和尺寸驗證。可新增自訂驗證規則以滿足您的特定需求。

☁️

雲端儲存

使用預簽名 URL 直接上傳至 S3、Google Cloud Storage、Azure Blob 等。無需伺服器代理。

🔄

分塊上傳

將大型檔案分割成塊以實現可靠的上傳。支援使用 tus 協定的可恢復上傳。

🖼️

圖片處理

在上傳前壓縮、調整大小和裁切圖片。自動修正 EXIF 方向問題。

📱

React Native

透過原生適配器在 React Native 中運作。Web 和行動應用程式使用相同的 API 介面。

🌐

SSR 安全

與 Next.js、Remix 和其他 SSR 框架無縫協作。無水合問題。

快速開始

1. 安裝

npm install @samithahansaka/dropup

2. 使用

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>
);
}