首页 > 解决方案 > s3 client.uploadFile() 挂起且没有错误

问题描述

我的凭证与 AWS cli 一起成功上传 s3 文件,凭证与作为静态站点的存储桶上的管理员用户相关联。更新:下载按预期工作。由于某种原因,节点“s3”包失败,但没有显示错误,它只是记录:

progress 0 4561 4561
progress 0 4561 4561
...
unable to upload: RequestTimeout: Your socket connection to the server was not read from or written to within the timeout period. Idle connections will be closed.
    at Request.extractError (/Users/../node_modules/aws-sdk/lib/services/s3.js:700:35)
    at Request.callListeners (/Users/../node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at Request.emit (/Users/../node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at Request.emit (/Users/../node_modules/aws-sdk/lib/request.js:688:14)

而且我不确定问题是什么?有什么见解吗?代码如下,直接取自 s3 包https://www.npmjs.com/package/s3

// RUNNING NODE 11.0 (due to un-updated dependencies in s3 or aws-sdk it must be under 11.15)
const { accessKeyId, secretAccessKey } = require('./tools/AWS.json')
const s3 = require('s3')
const AWS = require('aws-sdk')

const awsS3Client = new AWS.S3({
  accessKeyId,
  secretAccessKey,
  signatureVersion: 'v4',
  region: 'us-east-2',
})

const client = s3.createClient({
  s3Client: awsS3Client,
})
const liveBucket = 'my-bucket'

const params = {
  localFile: 'out/404.html',
  s3Params: {
    Bucket: liveBucket,
    Key: '404.html',
  },
}

const uploader = client.uploadFile(params)
uploader.on('error', function(err) {
  // never runs ...
  console.error('unable to upload:', err.stack)
})
uploader.on('progress', function() {
  // runs like 5 times before failing after a long wait
  console.log('progress', uploader.progressMd5Amount, uploader.progressAmount, uploader.progressTotal)
})
uploader.on('end', function() {
  // never runs ...
  console.log('done uploading')
})

权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/*"
        }
    ]
}

标签: node.jsamazon-s3aws-sdk

解决方案


由于存储桶权限问题,您的上传似乎挂起。请尝试将以下权限添加到您的存储桶:

  • s3:放置对象
  • s3:PutObject 标记
  • s3:ListBucketMultipartUploads
  • s3:ListMultipartUploadParts

推荐阅读