3 votes

Comment envoyer un fichier au serveur en utilisant l'API Deno fetch / ou convertir un fichier en RedableStream ?

Comment convertir un fichier en flux lisible ? J'essaie d'utiliser l'api fetch de deno pour faire cela, qui nécessite un flux lisible comme corps pour mettre quelque chose sur le serveur. Je n'arrive pas à comprendre comment convertir un fichier en ReadableStream ?

2voto

Marcos Casagrande Points 15232

Il n'existe pas encore de méthode intégrée pour convertir un fichier Reader à un ReadableStream .

Vous pouvez le convertir en utilisant le code suivant :

const file = await Deno.open("./some-file.txt", { read: true });

const stream = new ReadableStream({
  async pull(controller) {
    try {
      const b = new Uint8Array(1024 * 32);
      const result = await file.read(b);
      if (result === null) {
        controller.close();
        return file.close();
      }

      controller.enqueue(b.subarray(0, result));
    } catch (e) {
      controller.error(e);
      controller.close();
      file.close();
    }
  },
  cancel() {
    // When reader.cancel() is called
    file.close();
  },
});

// ReadableStream implements asyncIterator
for await (const chunk of stream) {
  console.log(chunk);
}

N'oubliez pas que Deno (1.0.5) fetch ne prend pas encore en charge un ReadableStream comme corps de la demande.

Actuellement, pour poster un fichier, il faut donc en tamponner le contenu.

const body = await Deno.readAll(file);
await fetch('http://example.com', { method: 'POST', body });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X