使用 webpack 运行开发服务器,我尝试列出 S3 存储桶中的项目并在浏览器中使用 javascript aws-sdk 控制台输出结果。
\n\n这样做时我收到此错误:
\n\nCross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://bucketname.s3.amazonaws.com/?list-type=2&max-keys=2. (Reason: CORS header \xe2\x80\x98Access-Control-Allow-Origin\xe2\x80\x99 missing).\nRun Code Online (Sandbox Code Playgroud)\n\n但是我在 webpack 开发服务器配置中设置了该标头,并通过以下方式证明:
\n\ncurl -I http://localhost:8080\n\nHTTP/1.1 200 OK\nX-Powered-By: Express\nAccess-Control-Allow-Origin: *\nAccess-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS\nAccess-Control-Allow-Headers: X-Requested-With, content-type, Authorization\nX-Content-Type-Options: nosniff\nContent-Type: text/html; charset=utf-8\nContent-Length: 7170\nVary: Accept-Encoding\nDate: Sat, 02 Dec 2017 16:15:04 GMT\nConnection: keep-alive\nRun Code Online (Sandbox Code Playgroud)\n\n所以我在所有事情上都尝试了*:
\n\nHTTP/1.1 404 Not Found\nX-Powered-By: Express\nAccess-Control-Allow-Origin: *\nAccess-Control-Allow-Methods: *\nAccess-Control-Allow-Headers: *\nRun Code Online (Sandbox Code Playgroud)\n\n如果标头存在,但错误提示标头丢失,是否可能是授权等其他原因?
\n\n如果它确实是标头设置,那么如果标头确实存在,下一步将是什么?
\n\n更新**** …
我收到标题中指定的错误。
我尝试这样做:使用php上传带有签名 URL 的对象
问题如下:['starts-with', '$key', 'test/']
['starts-with', '$key', 'test/']这是如何运作的?
存储桶中存在测试文件夹。
请帮忙。
我的代码(服务器端 php):
$formInputs = ['acl' => 'private'];
// Construct an array of conditions for policy $options = [
['acl' => 'private'],
['bucket' => $bucket],
['starts-with', '$key', 'test/'] ];
// Optional: configure expiration time string $expires = '+2 hours';
$postObject = new \Aws\S3\PostObjectV4(
$client,
$bucket,
$formInputs,
$options,
$expires );
$formAttributes = $postObject->getFormAttributes(); $formInputs = $postObject->getFormInputs();
?>
----------
<form action="<?=$formAttributes['action']?>" method="<?=$formAttributes['method']?>" enctype="<?=$formAttributes['enctype']?>">
<?php
foreach($formInputs as $k=>$v){
echo'<input …Run Code Online (Sandbox Code Playgroud) 我尝试通过 PUT 接口将图像文件 (jpeg) 上传到 AWS S3,但收到错误 SignatureDoesNotMatch。
在我的服务器上,我有一个 Express node.js 应用程序,它带有一个端点来创建签名 URL。
'use strict';
const express = require('express');
const bodyParser = require('body-parser');
const config = require('./config');
// Load the AWS SDK for Node.js
const AWS = require('aws-sdk');
AWS.config.update({
accessKeyId: config.AWS_ACCESS_KEY_ID,
secretAccessKey: config.AWS_SECRET_ACCESS_KEY,
region: 'us-east-1'
});
const s3 = new AWS.S3();
const app = express();
const awsS3Router = express.Router();
// parse application/json
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
// AWS S3 REST endpoints
awsS3Router.get('/getImageDrop', function(req, res) {
if(!req.query.filename) {
res.status(400).send('Request query is empty!'); …Run Code Online (Sandbox Code Playgroud)Tye AWS.S3.ManagedUpload 对象允许您上传指定“标签”的对象,但我没有看到任何用于在上传的对象上指定元数据的文档。这可能吗?如果是这样,如何?
我正在尝试确定对DynamoDB表的分区键使用二进制,数字还是字符串。我的应用程序是React.js / Node.js社交事件管理应用程序,其中存储在DynamoDB中的数据量的一半将用于存储项目和属性与其他项目和属性之间的关系。例如:用户的朋友,活动的参加者等。
因为架构是如此繁琐,并且由于DynamoDB项的最大大小只有400KB,并且出于性能和成本的原因,我担心密钥占用太多空间。就是说,我想使用UUID作为分区键。有众所周知的原因,对于多个节点分发新密钥的分布式无服务器应用程序,他们更喜欢UUID(或类似的熵级别,并且发生碰撞的可能性很小)。
因此,我认为我的选择是:
显然,开发人员的经验需要权衡。使用十六进制字符串最清晰,但最大。编码的字符串较小,但在日志记录,调试等过程中更难处理。Binary和Number比字符串更难,但最小。
我确定我不是第一个考虑这些折衷的人。是否有众所周知的最佳实践或启发式方法来确定应如何在DynamoDB中存储UUID密钥?
如果不是,那么我倾向于使用Binary类型,因为它是最小的存储,并且因为它的本机表示形式(作为base64编码的字符串)可以在人类需要查看和推理键的任何地方使用,包括查询,日志记录,和客户端代码。除了必须从一个转换到/ Buffer如果我使用DocumentClient,我错过了一些问题,在上面的列表中的其他选项之一的二进制类型或优势?
如果有问题,我正计划通过Lambda API进行对DynamoDB的所有访问,因此,即使需要进行转换或编组,也可以,因为我可以在我的API中进行操作。
顺便说一句,这个问题是一个已有 4年历史的问题(DynamoDB中的UUID数据类型)的续集,但是4年是一个快速发展的空间中的一个漫长的时间,因此我认为值得再次提出。
uuid amazon-web-services amazon-dynamodb serverless-framework aws-sdk-js
我正在逐步将文件加载到缓冲区中,该缓冲区有效,但是当ArrayBuffer完成将文件加载到其中时,浏览器崩溃。我需要做的是能够将缓冲区的片段发送buf = this.concatBuffers(buf, buffer);到axios PUT请求,以便我可以将文件逐步上载到s3,而不是将其加载到promise返回的单个变量中(因为超出了内存) 。
如何修改readFileAsBuffer和uploadFileToS3方法之间的链接以执行此操作?
这是我的代码,因此您可以按照此过程进行操作。
concatTypedArrays = (a, b) => {
const c = new a.constructor(a.length + b.length);
c.set(a, 0);
c.set(b, a.length);
return c;
};
concatBuffers = (a, b) =>
this.concatTypedArrays(
new Uint8Array(a.buffer || a),
new Uint8Array(b.buffer || b),
).buffer;
readFileAsBuffer = file =>
new Promise((resolve, reject) => {
const fileReader = new FileReader();
fileReader.file = file;
let buf = new ArrayBuffer();
const fileChunks = new FileChunker(file, 2097152);
fileReader.readAsArrayBuffer(fileChunks.blob());
fileReader.onload = e => {
this.onProgress(fileChunks); …Run Code Online (Sandbox Code Playgroud) 我正在遵循Trivikr提出的解决方案,以添加对s3.getSignedUrlapi 的支持,该支持目前在较新的 v3 中不可用。我正在尝试创建一个签名的 url 以从存储桶中获取一个对象。
为方便起见,代码添加如下:
const { S3, GetObjectCommand } = require("@aws-sdk/client-s3"); // 1.0.0-gamma.2 version
const { S3RequestPresigner } = require("@aws-sdk/s3-request-presigner"); // 0.1.0-preview.2 version
const { createRequest } = require("@aws-sdk/util-create-request"); // 0.1.0-preview.2 version
const { formatUrl } = require("@aws-sdk/util-format-url"); // 0.1.0-preview.1 //version
const fetch = require("node-fetch");
(async () => {
try {
const region = "us-east-1";
const Bucket = `SOME_BUCKET_NAME`;
const Key = `SOME_KEY_VALUE`;
const credentials = {
accessKeyId: ACCESS_KEY_HERE,
secretAccessKey: SECRET_KEY_HERE,
sessionToken: SESSION_TOKEN_HERE …Run Code Online (Sandbox Code Playgroud) 使用 AWS Node SDK 更新 Cloudfront 发行版时出现以下异常:
message:
'The If-Match version is missing or not valid for the resource.',
code: 'InvalidIfMatchVersion',
time: 2020-08-23T19:37:22.291Z,
requestId: '43a7707f-7177-4396-8013-4a704b7b11ea',
statusCode: 400,
retryable: false,
retryDelay: 57.05741843025996 }
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
为了完成 SES 域验证,我需要做两件事:
一切都可以像往常一样通过 API 完成(我通过CloudFormation 自定义资源使用 SES API )。
我正在尝试使用AWS.SESV2 (2019)验证域并创建 DKIM 。
问题在于AWS.SESV2.createEmailIdentity创建域验证码和 DKIM。
但是我无法从 API 响应中取回域验证码...我可以在 API 响应中找到 3 个 DKIM 令牌,但我无法获取验证令牌,尽管它已创建并且在 AWS 控制台中可见.
我需要从 API 调用中获取域验证令牌,因为我正在执行 IaaC。我不希望从 AWS 控制台进行任何手动复制/粘贴。
我可以在下面的文档中看到 DKIM 令牌,但已创建的域验证令牌在哪里?
我也很难理解AWS.SES (2010) 和AWS.SESV2 (2019)之间的区别。使用这 2 个 API 可以完成所有事情吗?哪一个用于什么用例?
看起来域验证可以使用AWS.SES.verifyDomainIdentity完成,但AWS.SESV2中没有类似的内容。
但是 DKIM 可以使用AWS.SES.verifyDomainDkim和AWS.SESV2使用这两个接口来完成。创建电子邮件身份。
我正在尝试使用这两个 API …
因此,我将我的项目迁移到新的 AWS-SDK V3,因为它具有模块化功能。然而,我似乎不知道该使用什么来代替CognitoIdentityCredentials新的 API。V2 的代码如下所示:
const credentials = new CognitoIdentityCredentials(
{
IdentityPoolId: config.get("IdentityPoolId"),
Storage: config,
Logins: {
[...]: idToken,
},
},
{
region: config.get("awsregion"),
},
);
if (credentials.needsRefresh()) {
...
}
Run Code Online (Sandbox Code Playgroud)
CognitoIdentityCredentials尝试在 V3 的github repo中查找,但我唯一发现的是该fromCognitoIdentity函数似乎没有类似的参数。V3 的文档令人困惑并且包含错误并且根本没有帮助。您能否为我提供一个工作流程,该工作流程可以实现与 V2 版本相同的功能,但使用新的 API?
aws-sdk-js ×10
amazon-s3 ×5
aws-sdk ×3
javascript ×3
amazon-ses ×1
ecmascript-6 ×1
filereader ×1
uuid ×1