NodeJS fs.createWriteStream将文件剪切为1mib

nwwlzxa7  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(134)

我使用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)环境中都可以观察到该错误

jgovgodb

jgovgodb1#

默认情况下,Fastify服务器允许接受的最大有效负载为1MiB(https://www.fastify.io/docs/latest/Reference/Server/#bodylimit)
在创建新的Fastify服务器时,可以通过设置bodyLimit属性来覆盖它

const app = Fastify({
  ...
  bodyLimit: 10485760, // 10MiB
});

相关问题