如何使用Deno fetch API将文件发布到服务器或将文件转换为RedableStream?

时间:2020-06-08 09:25:04

标签: deno

如何将文件转换为可读流? 我正在尝试使用deno的fetch api来执行此操作,这需要一个可读的流作为主体来在服务器上放置某些内容。 我不知道如何将文件转换为ReadableStream?

1 个答案:

答案 0 :(得分:2)

尚无内置方法将Reader转换为ReadableStream

您可以使用以下代码对其进行转换:

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);
}

请记住,Deno(1.0.5)fetch尚不支持ReadableStream作为请求正文。

因此,当前要发布文件,您需要缓冲内容。

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