@boewa-software/react-async-uploader v2.0.0
React Async Uploader
Dieses Packet stellt verschiedene React-Komponenten zur Umsetzung eines Asynchronen Clientseitigen Datei-Uplodas bereits. Intern wird hierfür die resumable.js-Komponente genutzt.
Hierfür wird eine Serverseitige API genutzt, die beispielsweise vom BoewaAsyncUploadBundle implementiert wird.
Instalation
$ npm install --save @boewa-software/react-async-uploaderNutzung
Zur Nutzung, muss ein serverseitiger Endpunkt in form einer URL zum Verschicken der Dateien vorhanden sein.
Alleinstehender Uploader
Um einen grundlegenden Uploader zu erzeugen, wird lediglich der Pfad zum Endpunkt benötigt (im Folgenden über /endpoint-url beschrieben).
Die Uploader-Kompnente kann beispielsweise eine DOM-Node ersetzten (hier exemplarisch über targetElement) beschrieben:
import React from 'react';
import {createRoot} from "react-dom/client";
import {Uploader} from '@boewa-software/react-async-uploader';
// DOM-Node zum Einhängen der React-Komponente
const targetElement = document.getElementById("target-element");
const root = createRoot(targetElement);
root.render(
<Uploader path={'/endpoint-url'} />
);Darstellung überschreiben
Die Darstellung des Uploaders kann nach belibeben überschrieben werden, dafür muss eine React-Komponente implementiert werden, die das Layout definiert.
Die Layout-Komponente wird über das component-Property an den Uploader übergeben:
import React from 'react';
import {createRoot} from "react-dom/client";
import {Uploader, DropZone, BrowseButton} from '@boewa-software/react-async-uploader';
const CustomLayoutComponent = ({ uploads, assignDrop, assignBrowse }) =>
<DropZone assignDrop={assignDrop}>
Uploads: {uploads.length}
<BrowseButton assignBrowse={assignBrowse}>
Select File
</BrowseButton>
</DropZone>
;
const targetElement = document.getElementById("target-element");
const root = createRoot(targetElement);
root.render(
<Uploader
path={'/endpoint-url'}
component={CustomLayoutComponent}
/>
);Dabei können die Bereitstellten Komponenten zur Definition einer Drop-Zone (DropZone) und eines Browse-Buttons (BrowseButton) genutzt werden.
Übergebene Parameter
Die Layout-Komponente erhält vom Uploader die folgenden Parameter (props) zur Nutzung übergeben:
uploaderState :
stringAktueller Status des Uploaders mit den WerteN:
running: Es werden Dateien hochgeladen.paused: Uploader ist Pausiert, Dateien werden erst nach dem Aufruf vonstartweiter hochgeladen.complete: Der Uploader ist aktiv, es sind keine Dateien zum Upload in der Warteschlange.
uploads :
uploadObject[]Array aller aktuellen Uploads. Jedes dieser Opload-Objekte hat die folgenden Properties:
uniqueIdentifier :
stringEindeutiger Identifier zur Zuordnung der Datei (erzeugt aus dem Dateinamen).
name :
stringDateiname des Uploads
size :
integerDateigröße in Bytes.
progress :
floatUpload-Fortschritt.
uploading :
boolStatus, ob die Datei aktuell hochgeladen wird.
complete :
boolStatus, ob die Datei vollständig hochgeladen wurde.
error :
?mixedIm Fehlerfall der vom Server zurückgemeldete Fehler.
responseContent :
?objectVom Server zurückgemeldete Antwort im Erfolgsfall.
abort :
funcFunktion zum Abbrechen des Uplodas der Datei. Die Datei kann über
retryerneut hochgleaden werden.cancel :
funcFunktion zum Abbrechen des Uplodas der Datei. Die Datei wird aus der Warteschlange entfernt.
retry :
funcIm Fehlerfall oder beim Abbruch kann der Upload wiederholt werden.
addFile :
func(HTML5File file)Mauelles Hinzufügen eines HTML5File-Objekts.
assignDrop :
func(DOMNode node)Registriert die DOMNode
nodeals Drop-Zone.assignBrowse :
func(DOMNode node)Registriert die DOMNode
nodeals Browse-Button.start :
funcAktiviert den Uploader.
pause :
funcPausiert den Uploader.
reset :
funcSetzt den Uploader zurück.
Zusätzliche props für die Layout-Komponente können von außen über die componentProps-Option übergeben werden.
Uploder-Optionen
Der Uploader unterstüzt die folgenden Optionen (props):
path :
stringURL zum Endpunkt des Servers, der die API implementiert.
component :
func|React.Component(optional)Layout-Komponente zur Darstellung.
componentProps :
object(optional)Zusätzliche
propsfür die Layout-Komponente.autoStart :
boolean(optional, default:true)Deaktiviert den automatischen Start des Uploads nach dem Hinzufügen einer Datei.
clearFileOnSuccess :
boolean(optional, default:false)Aktiviert, dass Dateien nach erfolgreichem Upload aus der Warteschlange entfernt werden.
onUploaderComplete :
func(optional)Callback, wenn alle Dateien hochgeladen wurden.
onUploaderProgress :
func(optional)Callback, wenn sich der Fortschritt ändert.
onUploaderPause :
func(optional)Callback, wenn der Uploader pausiert wird.
onUploaderCancel :
func(optional)Callback, wenn der Uploader zurückgesetzt wird.
onFileAdded :
func(upload)(optional)Callback, wenn eine Datei zur Warteschlange hinzgefügt wird
onFileProgress :
func(upload)(optional)Callback, wenn sich der Upload-Fortschirtt einer Datei ändert.
onFileSuccess :
func(upload)(optional)Callback, wenn eine Datei erfolgreich hochgeladen wurde
onFileError :
func(upload)(optional)Callback, wenn der Upload einer Datei fehlgeschlagen ist.
simultaneousUploads :
number(optional, default:1)Limit für den gleichzeitigen Upload mehrerer Dateien.
testChunks :
boolean(optional, default:true)Deaktiviert die Prüfung, ob ein Chunk bereits hochgeladen ist. Verringert die anzahl an Requests, bei großen ggfs. abgebrochenen Uploads wird jedoch dann die gesamte Datei erneut hochgeladen.
Uploader als Formular-Feld
Über die Komponenten UploadInput und MultipleUploadsInput können Formuar-Felder erzeugt werden, die einen erfolgten Upload an den Server vermelden.
Diese können mit den AsyncUploadType bzw. MultipleAsyncUploadsType-FormularTypen aus dem BoewaAsyncUploadBundle verknüpft weden.
Analog zum Uploader kann das Layout dieser Komponenten über das component-Property (ggfs. im Zusammenspiel mit componentProps) überschrieben werden:
import React from 'react';
import {createRoot} from "react-dom/client";
import {UploadInput} from '@boewa-software/react-async-uploader';
const InputComponent = ({ value }) => (
<>
{value
? `File: ${value}`
: 'Upload File'
}
<input type={'hidden'} name={'upload_field'} value={value ? value.identifier : ''} />
</>
);
const targetElement = document.getElementById("target-element");
const root = createRoot(targetElement);
root.render(
<UploadInput
path={'/endpoint-url'}
component={InputComponent}
/>
);Das Property initialValue empfängt den Initialwert mit den folgenden Pflicht-Attributen:
identifier :
stringUnique Identifier der Datei
name :
stringDateiname
progress :
numberFortschritt des Uploads
completed :
booleanAttribut, ob der Upload erfolgreich war.
Die MultipleUploadsInput-Komponente emfängt für initialValue ein Array von Objekten dieses Typs.
Weitere-Komponenten
DropZone
Diese Komponente ermöglicht die Erzeugung einer Drop-Zone für Uploads. Dafür muss der assignDrop-Callback des Uploaders an die Komponente übergeben werden.
BrowseButton
Diese Komponente ermöglicht die Erzeugung eines Browse-Buttons für Uploads. Dafür muss der assignBrowse-Callback des Uploaders an die Komponente übergeben werden.
Weiterentwicklung und DEMO
Infos hierzu sind in der Entwicklungs-Dokumentation zu finden.