如何使用 Deno fetch post 将文件 post 发送到服务器 API / 或将文件转换为 RedableStream?
How do I post a file to Server using Deno fetch API / or convert a file to a RedableStream?
如何将文件转换为可读流?
我正在尝试使用 deno 的 fetch api 来执行此操作,这需要一个可读流作为正文以将某些内容放在服务器上。
我不知道如何将文件转换为 ReadableStream?
目前还没有将 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
作为请求主体。
所以目前post一个文件,你需要缓冲内容。
const body = await Deno.readAll(file);
await fetch('http://example.com', { method: 'POST', body });
如何将文件转换为可读流? 我正在尝试使用 deno 的 fetch api 来执行此操作,这需要一个可读流作为正文以将某些内容放在服务器上。 我不知道如何将文件转换为 ReadableStream?
目前还没有将 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
作为请求主体。
所以目前post一个文件,你需要缓冲内容。
const body = await Deno.readAll(file);
await fetch('http://example.com', { method: 'POST', body });