Как получить прогресс загрузки файла с помощью потоков fetch () и WhatWG - PullRequest
0 голосов
/ 20 сентября 2018

Примечание: я не ищу никаких альтернатив.Я знаю, что это можно сделать с помощью XMLHttpRequest.Я также не забочусь о поддержке браузера.Я просто хочу узнать о новых / будущих стандартах.

У меня есть объект Файл , и я могу загрузить его с помощью PUT, используя fetch, например:

fetch(url, {
    method: "PUT",
    body: fileObject,
});

Как я могу получить прогресс загрузки из этого?

Из того, что я понимаю, body опций извлечения может быть ReadableStream .Так, может быть, есть способ обернуть объект File в ReadableStream и получить от него статус прогресса?

Например.как то так

fetch(url, {
    method: "PUT",
    body: asReadableStream(fileObject, onProgress),
});

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Как сказал Кайл, загрузка ReadableStream пока не поддерживается.https://github.com/whatwg/fetch/issues/95

Даже если бы это было возможно, я бы не стал следить за ходом загрузки через потоки (то есть, если FetchObserver превращается в штуку) Сейчас никто не работает над этим.Но Mozilla сделала предложение, которое выглядит примерно так:

/*
enum FetchState {
  // Pending states
  "requesting", "responding",

  // Final states
  "aborted", "errored", "complete"
};
*/

fetch(url, {
  observe(observer) { 
    observer.onresponseprogress = e => console.log(e);
    observer.onrequestprogress = e => console.log(e);
    observer.onstatechange = n => console.log(observer.state)
  }
)

Я помню, что тестировала его с использованием некоторых экспериментальных флагов давным-давно, но больше не могу найти демо, думаю, они удалили его из MDN, так какэто была собственная реализация / предложение.

0 голосов
/ 16 октября 2018

Краткий ответ: не может быть сделано прямо сейчас.

Ознакомьтесь со спецификацией здесь: https://fetch.spec.whatwg.org/#fetch-api

Второе предложение указывает, что нет способа отследить запрос прогресс при использовании fetch.

Метод fetch () является относительно низкоуровневым API для извлечения ресурсов.Он охватывает немного больше, чем XMLHttpRequest, хотя в настоящее время его не хватает, когда речь идет о прогрессировании запроса (не о прогрессировании ответа).

...