Biblioteka frontendowa TypeScript do wysyłania dużych plików w częściach (chunkach) z raportowaniem postępu, obsługą anulowania oraz weryfikacją integralności danych po stronie serwera.
- Upload plików w częściach (
chunked upload) - Raportowanie postępu (
onprogress) - Obsługa anulowania (
abort) - Automatyczne obliczanie i weryfikacja sumy kontrolnej (
SHA-256domyślnie) - Obsługa throttlingu eventów postępu (limit czasowy i objętościowy)
- Integracja z backendowymi endpointami
uploadifinish
Wewnątrz projektu korzystającego z bibliotek Craftserve dodaj do .npmrc:
@craftserve:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}
Następnie zainstaluj paczkę:
npm install @craftserve/ts-chunked-uploader
# lub
yarn add @craftserve/ts-chunked-uploaderimport { UploaderClient } from "@craftserve/ts-chunked-uploader";
const uploader = new UploaderClient({
endpoints: {
upload: "/api/uploads/{upload_id}/chunk",
finish: "/api/uploads/{upload_id}/finish",
},
headers: {
Authorization: "Bearer token",
},
});
uploader.onprogress((state) => {
console.log("Progress:", state.uploaded, "/", state.total, state.state);
});
const file = document.querySelector("input[type=file]")!.files![0];
await uploader.upload(file, 5 * 1024 * 1024); // wysyłaj w chunkach po 5 MBsetTimeout(() => uploader.abort(), 5000);| Parametr | Typ | Opis |
|---|---|---|
endpoints.upload |
string |
URL endpointu do wysyłki chunków, np. /api/upload/{upload_id} |
endpoints.finish |
string |
URL do weryfikacji i zakończenia uploadu |
headers |
Record<string, string> |
Dodatkowe nagłówki (np. Authorization) |
alg |
string |
Algorytm haszujący, np. sha-256 (domyślnie) |
progressReportIntervalMs |
number |
Minimalny odstęp czasu między raportami postępu (ms) |
progressReportBytes |
number |
Minimalna liczba bajtów między raportami postępu |
onFinalize |
() => Promise<void> |
Opcjonalny callback po zakończeniu uploadu |
{
"name": "@craftserve/ts-chunked-uploader",
"version": "1.0.0",
"publishConfig": {
"registry": "https://npm.pkg.github.com/"
}
}npm login --registry=https://npm.pkg.github.com
# lub ustaw w .npmrc tokennpm run build
npm publishUtwórz .github/workflows/publish.yml:
name: Publish @craftserve/ts-chunked-uploader
on:
push:
tags:
- "v*.*.*"
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
registry-url: "https://npm.pkg.github.com"
- run: npm ci
- run: npm run build
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}-
Aby opublikować nową wersję, zwiększ wersję w
package.jsoni dodaj tag:npm version patch git push origin main --tags
-
Każdy tag
vX.Y.Zautomatycznie wywoła publikację (jeśli używasz workflowa powyżej). -
W przypadku błędów „unauthorized” upewnij się, że masz poprawne uprawnienia
write:packages.