从Nestjs下载文件(无需保存)
我想让客户端下载从我的后端生成的PDF文件。我正在使用 pdfkit-lib 生成我的pdf文件。来自Nestjs documentation ,我决定使用arthableFile
duplexstream
(pdfkit-lib与writableStream
和streamableFile
readableStream )
@Get('/generate-file')
generateFile(): StreamableFile {
const fileStream = new stream.Duplex();
const doc = new pdfkit()
doc.pipe(fileStream);
// do stuff
doc.end();
return new StreamableFile(fileStream);
}
:此错误:
Error: The _write() method is not implemented
at new NodeError (node:internal/errors:371:5)
at Duplex.Writable._write (node:internal/streams/writable:588:11)
at writeOrBuffer (node:internal/streams/writable:389:12)
at _write (node:internal/streams/writable:330:10)
at Duplex.Writable.write (node:internal/streams/writable:334:10)
at PDFDocument.ondata (node:internal/streams/readable:754:22)
at PDFDocument.emit (node:events:390:28)
at PDFDocument.Readable.read (node:internal/streams/readable:527:10)
at flow (node:internal/streams/readable:1012:34)
at resume_ (node:internal/streams/readable:993:3)
它可以使其与fs.createwritestream
和fs.createReadStream
一起使用,但我不想在我的服务器上创建文件(并且在上面没有回调删除流式文件)。有什么想法吗?
I want to make client download a pdf file generated from my back-end. I am using the pdfkit-lib to generate my pdf file. From the NestJs documentation, I decided to use StreamableFile
from a DuplexStream
(pdfkit-lib works with a WritableStream
and StreamableFile
with a ReadableStream
) :
@Get('/generate-file')
generateFile(): StreamableFile {
const fileStream = new stream.Duplex();
const doc = new pdfkit()
doc.pipe(fileStream);
// do stuff
doc.end();
return new StreamableFile(fileStream);
}
But I end up with this error :
Error: The _write() method is not implemented
at new NodeError (node:internal/errors:371:5)
at Duplex.Writable._write (node:internal/streams/writable:588:11)
at writeOrBuffer (node:internal/streams/writable:389:12)
at _write (node:internal/streams/writable:330:10)
at Duplex.Writable.write (node:internal/streams/writable:334:10)
at PDFDocument.ondata (node:internal/streams/readable:754:22)
at PDFDocument.emit (node:events:390:28)
at PDFDocument.Readable.read (node:internal/streams/readable:527:10)
at flow (node:internal/streams/readable:1012:34)
at resume_ (node:internal/streams/readable:993:3)
It can make it works with fs.createWriteStream
and fs.createReadStream
but I don't want to create the file on my server (and there is no callback on StreamableFile to delete). Any idea ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我最终使用
fs.createwritestream
和fs.CreateReadStream
通过删除创建的文件:I end up using
fs.createWriteStream
andfs.createReadStream
by deleting the created file :如果不写临时文件的开销,应该可以执行此操作。您可以尝试直接流式传输到
res
流中,类似:It should be possible to do this without the overhead of writing to a temporary file. You can try streaming directly into the
res
stream, something like: