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 ?
Réponse
Trop de publicités?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 });