node.js - 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/*"
}
]
}
解决方案
由于存储桶权限问题,您的上传似乎挂起。请尝试将以下权限添加到您的存储桶:
- s3:放置对象
- s3:PutObject 标记
- s3:ListBucketMultipartUploads
- s3:ListMultipartUploadParts
推荐阅读
- javascript - Uglify.JS minifies filename instead of file contents
- xml - 使用 IXMLDOMDocument 和 XPath 解析 Dynamics 365 XML 数据
- ios - 如何根据我的要求自定义表格视图标题?
- java - int 数组中的错误
- mysql - 为什么mysql不像percona服务器那样实现杀死空闲事务?
- javascript - model.predict is not a function while using TensorflowJS
- javascript - Math.min.apply(Math,Array) return NaN when Array.length = 100
- mysql - MySQL 中的不偏不倚查询
- php - Wordpress - ACF - 带有 x 2 字段过滤器的管理员/用户列表
- python - 用于为返回动态数据的函数编写单元测试的 Python 库