我正在使用 JavaScript 文件系统访问 API 将可读流的输出流式传输到FileSystemWritableFileStream
. 我创建了一个可写流包装器来使用该writeStream.pipeTo(readStream)
方法,但是在使用手动读取ReadableStream
和写入FileSystemWritableFileStream
. 我跳过使用的标头,seek
因为它包含文件大小,然后开始写入数据。这是代码:
function fileWritableStreamToWritableStream(fileStream, headerWriteMethod, headerLengthBytes) {
let writer = fileStream;
let bytesWritten = 0;
const writableStream = new WritableStream({
// Implement the sink
async start(controller) {
if(headerLengthBytes) {
// returns a promise that resolves when the writer is ready for another operation
return writer.seek(headerLengthBytes);
}
},
async write(chunk) {
bytesWritten += chunk.length;
// returns a promise that resolves when the writer is ready for another operation
return writer.write({ type: 'write', data: chunk });
},
async close() {
let promise = Promise.resolve();
if(headerWriteMethod) {
let headerBuffer = new ArrayBuffer(headerLengthBytes);
let view = new DataView(headerBuffer);
let headerBytes = headerWriteMethod(view, bytesWritten);
promise = writer.seek(0)
.then(() => writer.write({type: 'write', data: headerBytes.buffer }));
}
return promise.then(() => writer.close());
}
});
return writableStream;
}
这在其他地方使用,如下所示:
audioStream.pipeTo(writableStream);
一旦我开始写作,我就会在控制台中收到以下错误:
Errors: Uncaught (in promise) TypeError: Failed to execute 'write' on 'UnderlyingSinkBase': required member type is undefined. wav-recording.service.js:262 Uncaught TypeError: Failed to execute 'enqueue' on 'ReadableStreamDefaultController': Cannot enqueue a chunk into a closed readable stream at MessagePort.port.onmessage