0

使用pkgcloud将文件上传到 Rackspace Cloud 文件导致请求超时,然后发生 502 错误使服务器无法使用(停止)但不会崩溃。

我的代码:

function processImage(req, reply) {
  const options = {}
  let imageName = null
  let imageURL = null
  req.multipart(handler, done, options)

  // upload to rackspace here
  function done() {
    const readStream = fs.createReadStream(`${imgsPath}/${imageName}`)
    const writeStream = rackspace.upload({
      container: 'image-bearbrand-container',
      remote: imageName
    })
    writeStream.on('error', function(err) {
      reply.code(400).send({ err })
    })
    writeStream.on('success', function() {
      rimraf.sync(`${imgsPath}/${imageName}`) // delete current image because it now uploaded to rackspace
      reply.code(200).send({ imageURI: `${imageCdnUrl}${imageName}` })
    })
    readStream.pipe(writeStream)
  }
  // saving image to disk first
  function handler(field, file, filename, encoding, mimetype) {
    if (mime.includes(mimetype)) {
      imageName = newFilename('jpg')
      const imageStream = fs.createWriteStream(`${imgsPath}/${imageName}`)
      pump(file, imageStream, err => {
        if (err) throw Error(err.message)
      })
    } else {
      reply.code(200).send({
        message:
          'Ssst! your file is malicious! We keep your secret do not worry'
      })
    }
  }
}

所以这里我的代码正在等待 Rackspace 上的上传图像结束然后发送响应文件图像的大小约为 0.5mb 到 2mb,使用 rackspace 可能需要 2 分钟然后请求超时然后我的服务器停止并且无法访问。这是因为流永远不会结束吗?如果请求超时,我应该在流上超时并使其结束吗?那该怎么做呢?

对于框架,我使用的是 fastify。

4

0 回答 0