【问题标题】:File upload via API in Express.js: Notification after file uploadExpress.js 中通过 API 上传文件:文件上传后的通知
【发布时间】:2017-04-21 06:27:56
【问题描述】:

我们正在尝试构建一个从 Android 和 iOS 手机上传的大文件(大小>30MB),为此创建了一个 Express.js API 用于文件上传。

端点:user/upload

uploadFile:function(req,res){

    //upload files to AWS s3 asychrnous
    s3.upload(params,options,function(err, data) {
        //when upload complete
        //need a help on this part
        if(data){
          //Send a notification to client
        }
    });

    res.json({
        status:true,
        'message':'Upload ongoing'
    });
}

当用户请求 API (user/upload) 时,它会立即给出以下响应:

{
  status:true,
  'message':'Upload ongoing'
}

因为上传是异步的。那么如何在上传完成时通知客户端呢?

【问题讨论】:

  • 我猜你的res.json({status:true,'message':'Upload ongoing'}); 代码块应该在s3.upload 函数中的if(data){....} 之下。
  • 不,我不能这样做,因为文件上传需要太多时间,这就是我将其设为异步的原因
  • 在这种情况下,您可以在屏幕上显示一些进度条,让用户知道上传正在进行对吗?
  • 但是我怎样才能跟踪客户的进度??

标签: javascript android node.js amazon-web-services express


【解决方案1】:

对于具体的用例,我会推荐以下流程

  1. 从 Express API 获取 Pre-Signed URL 以将文件上传到 S3
  2. 从移动客户端直接将文件上传到 S3(这将显示状态为正在上传)
  3. 上传完成后,S3 将触发 SNS 推送通知,该通知将发送到移动设备
  4. 移动设备将读取推送通知并更改应用程序中的上传状态

以上流程是完全异步且高度可扩展的,减少了 express API 的负载。

【讨论】:

  • 感谢 SNS 建议让我试试
  • 为什么我需要一个签名的 URL??
  • 与其通过 express API 上传到 S3,不如直接以安全的方式上传到 S3 到私有存储桶(减少 express API 的负载)
  • 你的意思是直接浏览器上传??
  • 是的。直接浏览器上传,或直接从移动应用上传私有存储桶。
猜你喜欢
  • 1970-01-01
  • 2021-07-22
  • 2011-10-18
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2013-09-01
相关资源
最近更新 更多