使用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。