Mit der Upload-Komponente können Sie Inhalte direkt von Ihrer Website hochladen. Sie benötigen lediglich unsere Komponentenbibliothek und ein generiertes JWT-Token.
<script
type="module"
src="https://cdn.video-dns.com/npm/@maveio/components/+esm"
></script>
<mave-upload token="<token>"></mave-upload>Das erforderliche Token ist ein generiertes JWT (JSON Web Token) unter Verwendung des von mave bereitgestellten API key.
Je nachdem, was Sie als sub festlegen, können Sie bestimmen, was zu tun ist. Sie können dies als Umfang des Uploads sehen:
sub: {space id}: Fügt dem Bereich ein neues Video hinzusub: {collection id}: Fügt der Sammlung ein neues Video hinzusub: {embed id}: ersetzt das Video durch den UploadIhre Space-ID finden Sie in Einstellungen: Developers und die Sammlungs-ID finden Sie auf der Seite der Sammlung selbst, unter dem Titel.
Sie können zwar ein „statisches“ JWT generieren, wir empfehlen jedoch die Erstellung temporärer JWTs mit einem Ablaufdatum. So können Sie das JWT jederzeit widerrufen und Missbrauch vorbeugen. So können Sie dies umsetzen:
Während das folgende Beispiel die Verwendung in einer node.js-Umgebung demonstriert, wird JWT in verschiedenen Sprachen und Frameworks weitgehend unterstützt:
// server
const jwt = require("jsonwebtoken");
const token = jwt.sign(
{
sub: "XD9HPRtkDDmENLeVy9ripU", // space, collection or embed can be specified
exp: 1680795697, // until when the user can upload
},
"SHJmNHhXNnFublZXajNCNllYUmhoTTpUVDRqZ3ZqYWJtOEtVbmNFb2h2d1RY" // API key
);
// return `token` to frontend
Hinweis: Wenn Sie das Hochladen ohne exp zulassen, bedeutet dies, dass diese Upload-Komponente immer gültig ist (bis Sie Ihren API-Schlüssel widerrufen). Wir empfehlen dringend die Verwendung eines geeigneten exp, um Missbrauch zu verhindern.
Sobald token zu <mave-upload token="{token}" /> hinzugefügt wurde, ist die Upload-Komponente aktiv und einsatzbereit.
| Eigentum | Beschreibung |
|---|---|
| token | Das generierte JWT-Token (zusätzlich können Sie auf embed oder collection verweisen). |
| locale | Der Standardwert ist en, aber Sie können nl, de oder fr angeben, wodurch die Sprache innerhalb der Standardkomponente geändert wird. |
| color | Standardmäßig ist Blau, aber durch Angabe einer Farbe können Sie die Farbe der Schaltfläche ändern. |
| radius | Sie können den Radius der Schaltfläche ändern, wenn Sie diesen Wert angeben. |
| font | Sie können die Schriftart überschreiben, indem Sie diesen Wert angeben. |
| disableCompletion | Deaktiviert den Abschlussstatus. Dies ist nützlich, wenn Sie die Fertigstellung selbst durchführen möchten. |
| Veranstaltung | Beschreibung |
|---|---|
| completed | Wird ausgelöst, wenn der Upload abgeschlossen ist. Beim direkten Rendern eines Mave-Players mit diesem Ereignis wird die Originalvideodatei angezeigt (keine verarbeitete Wiedergabe). |
| playable | Wird abgefeuert, sobald eine spielbare Version verfügbar ist. detail enthält { embed }, sodass Sie ein <mave-player> bereitstellen können, sobald das Streaming (erste HLS-Wiedergabe) bereit ist. |
| rendition | Wird für jede erstellte Darstellung aufgerufen. In detail wird type der Wiedergabe übergeben, wenn Sie danach etwas Bestimmtes rendern möchten (nützlich, wenn Sie beispielsweise nach dem Hochladen eine HLS-Version laden möchten). |
| upload | Wird direkt aufgerufen, wenn der Upload begonnen hat, und ist nicht zum Rendern bereit. |
| processing | Wird direkt aufgerufen, wenn die Verarbeitung begonnen hat, und ist nicht zum Rendern bereit. |
| failed | Wenn der Upload fehlgeschlagen ist. |
| error | Wird ausgegeben, wenn die Upload-Pipeline einen Fehler vom Backend meldet. detail enthält { message }. |
| invalid | Wird wegen nicht unterstützter Dateien ausgelöst. detail enthält { file, reason, allowedExtensions, message }, sodass Sie spezifische Anleitungen anzeigen oder Ihre Benutzeroberfläche zurücksetzen können. |
| statechange | Wird immer dann ausgelöst, wenn der interne Status oder Fortschritt aktualisiert wird. detail enthält { state, progress, dragging, error }, sodass Sie benutzerdefinierte Benutzeroberflächen und Fehlerdarstellungen steuern können. |
Um beispielsweise den Upload in Javascript abzufangen und ihn zu ersetzen, sobald der Client den Upload abgeschlossen hat, können Sie Folgendes tun:
const upload = document.querySelector("mave-upload");
upload.addEventListener("completed", (event) => {
const player = document.createElement("mave-player");
player.setAttribute("embed", event.detail.embed);
upload.parentNode.replaceChild(player, upload);
});<mave-upload> wird weiterhin mit Standardeinstellungen ausgeliefert, aber Sie können jetzt für jede Phase des Upload-Ablaufs Ihr eigenes Markup bereitstellen, indem Sie benannte Slots hinzufügen.
<mave-upload token="<token>">
<div slot="initial" class="initial-card">
<h2>Upload your media</h2>
<p>Drop a file or use the button below.</p>
<button type="button" data-mave-upload-select>Choose a file</button>
</div>
<div slot="uploading" class="uploading-card">
<div class="bar">
<div class="bar__value" style="width: 0%"></div>
</div>
<span data-role="progress-value">0%</span>
</div>
<div slot="processing" class="processing-card">Processing…</div>
<div slot="done" class="done-card">All set!</div>
<div slot="error" class="error-card">
<p>Something went wrong. Try again.</p>
<button type="button" data-mave-upload-select>Try again</button>
</div>
</mave-upload>slot="initial" | "uploading" | "processing" | "done" | "error" entscheidet, welches Layout für diesen Status angezeigt wird.data-mave-upload-select zu einem Element im ursprünglichen Slot hinzu, um die integrierte Dateiauswahl zu öffnen.statechange auf den Fortschritt reagiert oder Statusänderungen zieht.const upload = document.querySelector("mave-upload");
const progressValue = upload.querySelector('[data-role="progress-value"]');
const progressBar = upload.querySelector(".bar__value");
upload.addEventListener("statechange", ({ detail }) => {
const { state, progress, dragging } = detail;
progressValue.textContent = `${progress}%`;
progressBar.style.width = `${progress}%`;
upload.toggleAttribute("drag-highlight", dragging);
});Jeder Status wird auch auf dem Hostelement verfügbar gemacht, sodass Sie das reine CSS-Styling steuern können:
state="initial|uploading|processing|done|error", progress="0-100", drag-over, ready.Wenn Sie beispielsweise mave-upload hervorheben möchten, wenn jemand eine Datei darüber zieht, können Sie Folgendes tun:
mave-upload[drag-over] [slot="initial"] {
box-shadow: inset 0 0 0 2px rgba(99, 102, 241, 0.5);
}| Methode | Beschreibung |
|---|---|
| reset() | Wenn der Upload completed aufgerufen hat, können Sie ihn zurücksetzen, um einen weiteren Upload zu ermöglichen. |
React- und Vue-Wrapper stellen dieselben Methoden über Refs bereit, sodass Sie reset() (und andere öffentliche Methoden) aufrufen können, ohne sich manuell mit dem zugrunde liegenden benutzerdefinierten Element befassen zu müssen.
import { useRef } from "react";
import { Upload } from "@maveio/components/react";
const uploadRef = useRef<React.ElementRef<typeof Upload>>(null);
return <Upload ref={uploadRef} token="<token>" />;
// whenever you need to trigger a new upload
uploadRef.current?.reset();<template>
<Upload ref="upload" token="<token>" />
</template>
<script setup lang="ts">
import { ref } from "vue";
import { Upload } from "@maveio/components/vue";
const upload = ref<InstanceType<typeof Upload> | null>(null);
function triggerReset() {
upload.value?.reset();
}
</script>Schauen Sie sich unsere Beispielseite auf Github an.