javascript - 传输加速是否有效?响应位置和对象 URL 不同
问题描述
我在反应环境中使用 aws-sdk 将视频上传到 S3。并使用加速端点实现更快的数据传输。
端点是bucket-name.s3-accelerate.amazonaws.com
我将选项更改为“启用”以加速存储桶属性中的传输。
下面是我将文件对象上传到 s3 的代码。
import AWS from "aws-sdk";
require("dotenv").config();
const AWS_ACCESS_KEY = process.env.REACT_APP_AWS_ACCESS_KEY;
const AWS_SECRET_KEY = process.env.REACT_APP_AWS_SECRET_KEY;
const BUCKET = process.env.REACT_APP_BUCKET_NAME;
const REGION = process.env.REACT_APP_REGION;
AWS.config.update({
accessKeyId: AWS_ACCESS_KEY,
secretAccessKey: AWS_SECRET_KEY,
region: REGION,
useAccelerateEndpoint: true, //----> the options is here.
});
async function uploadFileToS3(file) {
const params = {
Bucket: BUCKET,
Key: file.name,
ContentType: 'multipart/form-data',
Body: file
};
const accelerateOption = {
Bucket: BUCKET,
AccelerateConfiguration: { Status: 'Enabled'},
ExpectedBucketOwner: process.env.REACT_APP_BUCKET_OWNER_ID,
};
const s3 = new AWS.S3();
try {
s3.putBucketAccelerateConfiguration(accelerateOption, (err, data) => {
if (err) console.log(err)
else console.log(data, 'data put accelerate') //----> this is just object {}
});
s3.upload(params)
.on("httpUploadProgress", progress => {
const { loaded, total } = progress;
const progressPercentage = parseInt((loaded / total) * 100);
console.log(progressPercentage);
})
.send((err, data) => {
console.log(data, 'data data');
});
} catch (err) {
console.log(err);
}
}
数据对象的location属性中的url中肯定有s3-accelerate。(在 console.log 中)
{
Bucket: "newvideouploada2f16b1e1d6a4671947657067c79824b121029-dev"
ETag: "\"d0b40e4afca23137bee89b54dd2ebcf3-8\""
Key: "Raw Run __ Race Against the Storm.mp4"
Location: "https://newvideouploada2f16b1e1d6a4671947657067c79824b121029-dev.s3-accelerate.amazonaws.com/Raw+Run+__+Race+Aga
}
但是,我上传的视频属性的对象 URL 不存在。这是应该的吗?
我是否以错误的方式使用 Transfer Acceleration?我看到了文档,AWS 说使用putBucketAccelerateConfiguration
. 但是当我 console.log 有注意到响应。
请让我知道如何在 Javascript awd-sdk 中使用传输加速。
解决方案
如果您在某些 AWS 计算(EC2、ECS、EKS、Lambda)上运行此代码,并且存储桶与您的计算位于同一区域,则考虑使用VPC Gateway endpoints
for S3
。更多信息在这里。如果计算和存储桶位于不同的区域,请考虑将VPC Endpoints for S3与区域间VPC 对等互连。注意:VPC 网关终端节点是免费的,而 VPC 终端节点不是。
启用后至少需要半小时才能BucketAccelerate
生效。您不需要在每次上传文件时都调用它,除非您在完成后还暂停存储桶加速。
当您想使用 AWS 主干网络更快地上传数据时,存储桶加速会有所帮助(可能是用户位于区域“A”而存储桶位于区域“B”,或者您想要上传更大的文件,在这种情况下它会到达最近的边缘位置,然后使用 AWS 主干网络)。您可以使用此工具检查各个地区在速度方面的潜在改进。
使用此功能时还会产生额外费用。检查 S3定价页面上的数据传输部分。
推荐阅读
- laravel - Laravel - How to extract one field for items in a model to an array?
- mongodb - 真正缓慢的 MongoDB 查询背后的原因可能是什么?
- javascript - 打字时增加输入高度
- c++ - const 引用传递的参数的可变左值引用
- android - Android Studio:清单合并失败并出现多个错误
- amazon-web-services - 我无法读取环境变量(Go 中的 aws-lambda)
- linux - 什么是 rtnetlink(linux os),netlink 和 rtnetlink 有什么区别?
- angular - 我在我的 ASP.NET MVC & Entity Framework 项目中输入日期为“10/09/2019”,但在数据库中它保存为“1.1.0001 00:00:00”
- javascript - 循环的文件预览适用于一个项目,两个或多个文件重复上一个文件
- php - 如果有特定的 get 参数,则重定向到新地址