我使用NestJS和fastify作为我的api服务器。对于文件上传使用@fastify/multipart。这就是下载文件的函数的样子
async uploadFile(path, file): Promise<void> {
const normalPath = resolve(`${process.cwd()}/uploads/files/${path}/${file.filename}`)
await pump(file.file, createWriteStream(normalPath))
}
在“文件”中出现fastify类型
interface MultipartFile {
toBuffer: () => Promise<Buffer>
file: NodeJS.ReadableStream
filepath: string
fieldname: string
filename: string
encoding: string
mimetype: string
fields: import('@fastify/multipart').MultipartFields
}
通过HTTP上传一个文件是完整的,但是一旦文件被写到磁盘上,就只有1024 kb了(在某些情况下更少,我不理解这种模式)
我还尝试将ReadableStream传递给这样的函数:
export const writeFileStream = (stream, path) => {
return new Promise((resolve, reject) =>
stream
.on('error', error => {
if (stream.truncated) unlinkSync(path)
reject(error)
})
.pipe(createWriteStream(path))
.on('error', error => reject(error))
.on('finish', () => resolve({ path }))
)
}
没有错误,但结果是一样的:整个文件的1兆字节。这段代码用来工作,环境没变。会是什么呢?在本地(Windows)和容器(Alpine)环境中都可以观察到该错误
1条答案
按热度按时间jgovgodb1#
默认情况下,Fastify服务器允许接受的最大有效负载为1MiB(https://www.fastify.io/docs/latest/Reference/Server/#bodylimit)
在创建新的Fastify服务器时,可以通过设置
bodyLimit
属性来覆盖它