Http 在服务器完成操作之前,我是否可以延迟在Express中上传?

Http 在服务器完成操作之前,我是否可以延迟在Express中上传?,http,express,browser,amazon-s3,Http,Express,Browser,Amazon S3,我有一个服务器,它通过PUT接收文件,然后将它们存储在S3中 客户机放置文件后,通常会请求正确的文件,作为渲染的回报。不幸的是,我的服务器实际处理上传并将它们存储在S3中需要一些时间 以下是我在Express中使用的代码: 请求管道(writeStream); res.header('Access-Control-Allow-Origin','*'); res.header('Access-Control-Allow-Methods','PUT,OPTIONS'); res.header('Ac

我有一个服务器,它通过PUT接收文件,然后将它们存储在S3中

客户机放置文件后,通常会请求正确的文件,作为渲染的回报。不幸的是,我的服务器实际处理上传并将它们存储在S3中需要一些时间

以下是我在Express中使用的代码:

请求管道(writeStream);
res.header('Access-Control-Allow-Origin','*');
res.header('Access-Control-Allow-Methods','PUT,OPTIONS');
res.header('Access-Control-Allow-Headers','Content-Type');
if('OPTIONS'==req.method){
res.sendStatus(200);
res.end('OK!');
返回;
}
if('PUT'==请求方法){
writeStream.on('error',()=>{
res.sendStatus(500);
});
writeStream.on('close',async()=>{
//这可能需要30秒
等待这个.storage.store(fn,args.blobID);
//这似乎没有任何效果
//我想阻止客户“完成”这项工作
//在我说完成之前先提出请求。
res.end('OK!')
});
res.sendStatus(200);
}
理想情况下,我可以“暂停”客户对的PUT请求,直到
storage.store()
完成,确保文件实际可用

有没有办法让我这么做

另外,我不确定
sendStatus()
/
end()
调用,如果我混淆了什么,请随意评论


另外,我知道,在理想的情况下,我只需要分发签名URL,让客户端直接上传到S3,但我需要AES256加密…

我不熟悉S3上传,但我猜会有回调(例如向您发送回复(成功或失败…)等)。(如果没有,请告诉我)

我记得,Express不会自动发送超时,所以您只需将响应放在S3的响应函数中,这样您的请求就不会在存储结束之前结束

如果调用res.send(),则不必调用res.end()。res.send()为您调用res.end()

res.sendStatus()等于res.status(…).send(消息或代码)(via)


因此,res.sendStatus()将调用end()。

谢谢。然而,我似乎必须调用
res.sendStatus(200)
触发实际的客户端上载。此外,存储函数是异步的,将等待S3上传完成。
S3.upload(data,function(response){ // something like this
  // then, you can callback
  // ...
  // res.end() or res.sendStatus(...)
})