如何解决 Fine Uploader 中的 RequestTimeTooSkewed

How to work around RequestTimeTooSkewed in Fine Uploader

我将 Fine Uploader 与 S3 一起使用,我有一个计算机时间已关闭的客户端,导致 S3 RequestTimeTooSkewed 错误。理想情况下,我的客户会有合适的时间,但我希望我的应用程序能够稳健地应对这种情况。

我看过这个 post - https://github.com/aws/aws-sdk-js/issues/399 关于如何自动重试请求。您从错误响应中获取 ServerTime 并将其用作响应中的时间。另一种方法是每次都从可靠的外部来源获取时间,避免重试。但是,我不确定如何将这两种方法连接到 S3 Fine Uploader。有没有人知道如何做到这一点?

Fine Uploader 5.5 中提供了一个解决方案来解决这种情况。来自 S3 feature documentation:

如果机器上的时钟运行 Fine Uploader 与当前日期相差太远,S3 可能会拒绝从这台机器发送的任何请求。为了克服这种情况,您可以在创建新的 Fine Uploader 实例时以毫秒为单位包含一个 clock drift value。设置此值的一种方法是从根据您的服务器的当前 unix 时间中减去根据浏览器的当前时间。例如:

var uploader = new qq.s3.FineUploader({
    request: {
        clockDrift: SERVER_UNIX_TIME_IN_MS - Date.now()
    }
})

如果此值为non-zero,Fine Uploader S3 将使用它来填充 x-amz-date header 和发送到 S3 的保单到期日期。