Start · Sprachen · JavaScript · Referenz · BackgroundFetchRegistration.uploadTotal

BackgroundFetchRegistration.uploadTotal

Eigenschaft

Schreibgeschützte Eigenschaft, die die Gesamtzahl der Bytes angibt, die ein Background Fetch an den Server hochladen soll.

seit JavaScript Experimentell: Chromium-basierte Browser (Chrome/E Kategorie: webapi

Signatur

BackgroundFetchRegistration.uploadTotal

Beschreibung

Die schreibgeschützte Eigenschaft uploadTotal einer BackgroundFetchRegistration gibt an, wie viele Bytes die Anfragen eines Hintergrund-Abrufs insgesamt an den Server senden. Der Browser berechnet den Wert aus der Summe der Anfrage-Körper (Request-Bodies) aller Request-Objekte, die an BackgroundFetchManager.fetch() übergeben wurden.

Zusammen mit uploaded können Sie den Upload-Fortschritt berechnen, zum Beispiel für eine Fortschrittsanzeige beim Hochladen großer Dateien wie Videos oder Backups. Das funktioniert auch dann, wenn die Seite zwischenzeitlich geschlossen wurde. Anders als bei downloadTotal legen Sie den Wert nicht selbst fest, denn der Browser kennt die Größe der Anfrage-Körper bereits.

Enthalten die Anfragen keinen Body (etwa reine GET-Anfragen), ist der Wert 0. Den Fortschritt überwachen Sie über das Ereignis progress der Registrierung.

Rückgabewert

Typ
number
Beschreibung
Eine Ganzzahl (unsigned long long), die Gesamtzahl der hochzuladenden Bytes. 0, wenn keine Anfrage einen Body hat.

Beispiele

Upload-Größe einer neuen Registrierung auslesen

// Im Fenster-Kontext: große Datei im Hintergrund hochladen
const uploadVideo = async (file) => {
  const reg = await navigator.serviceWorker.ready;
  const request = new Request('/api/upload', {
    method: 'POST',
    body: file
  });
  const bgFetch = await reg.backgroundFetch.fetch('video-upload', [request], {
    title: 'Video wird hochgeladen'
  });
  console.log(`Hochzuladen: ${bgFetch.uploadTotal} Bytes`);
  return bgFetch;
};
Hochzuladen: 52428800 Bytes

Upload-Fortschritt in Prozent anzeigen

const trackUpload = async (id) => {
  const reg = await navigator.serviceWorker.ready;
  const bgFetch = await reg.backgroundFetch.get(id);
  if (!bgFetch) return;

  const bar = document.querySelector('#upload-progress');
  bgFetch.addEventListener('progress', () => {
    if (bgFetch.uploadTotal === 0) return; // nichts hochzuladen
    const percent = Math.round((bgFetch.uploaded / bgFetch.uploadTotal) * 100);
    bar.value = percent;
    console.log(`Upload: ${percent} %`);
  });
};

trackUpload('video-upload');
Upload: 37 %

Alle laufenden Hintergrund-Uploads auflisten

const listUploads = async () => {
  const reg = await navigator.serviceWorker.ready;
  const ids = await reg.backgroundFetch.getIds();
  for (const id of ids) {
    const f = await reg.backgroundFetch.get(id);
    if (f.uploadTotal > 0) {
      console.log(`${id}: ${f.uploaded}/${f.uploadTotal} Bytes`);
    }
  }
};

listUploads();
video-upload: 19398656/52428800 Bytes

// Wichtig · Fallstricke

  • Experimentelle API: Die Background Fetch API gibt es nur in Chromium-basierten Browsern (Chrome, Edge, Opera). Prüfen Sie vorher mit 'BackgroundFetchManager' in self, ob sie verfügbar ist.
  • Die API steht nur in einem sicheren Kontext (HTTPS) und nur mit registriertem Service Worker zur Verfügung.
  • uploadTotal kann 0 sein. Prüfen Sie das vor der Division, sonst erhalten Sie NaN.
  • Anfragen, deren Body ein ReadableStream ist, werden von Background Fetch nicht unterstützt. Der Aufruf von fetch() wird dann mit einem TypeError abgelehnt.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird ignoriert bzw. löst im Strict Mode einen TypeError aus.