标签: aws-sdk-js

aws-sdk 抱怨缺少实际存在的 cors 标头

使用 webpack 运行开发服务器,我尝试列出 S3 存储桶中的项目并在浏览器中使用 javascript aws-sdk 控制台输出结果。

\n\n

这样做时我收到此错误:

\n\n
Cross-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).\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是我在 webpack 开发服务器配置中设置了该标头,并通过以下方式证明:

\n\n
curl -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\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我在所有事情上都尝试了*:

\n\n
HTTP/1.1 404 Not Found\nX-Powered-By: Express\nAccess-Control-Allow-Origin: *\nAccess-Control-Allow-Methods: *\nAccess-Control-Allow-Headers: *\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果标头存在,但错误提示标头丢失,是否可能是授权等其他原因?

\n\n

如果它确实是标头设置,那么如果标头确实存在,下一步将是什么?

\n\n

更新**** …

amazon-s3 amazon-web-services aws-sdk-js

6
推荐指数
1
解决办法
2307
查看次数

AccessDenied 根据策略无效:策略条件失败:["starts-with", "$key", "2017/"]

我收到标题中指定的错误。

我尝试这样做:使用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)

amazon-s3 amazon-web-services aws-sdk aws-sdk-js

6
推荐指数
1
解决办法
7122
查看次数

使用 PUT 和表单数据将文件上传到 S3

我尝试通过 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)

javascript amazon-s3 aws-sdk-js

6
推荐指数
1
解决办法
1万
查看次数

AWS Javascript SDK:上传带有元数据的对象

Tye AWS.S3.ManagedUpload 对象允许您上传指定“标签”的对象,但我没有看到任何用于在上传的对象上指定元数据的文档。这可能吗?如果是这样,如何?

aws-sdk-js

6
推荐指数
1
解决办法
6715
查看次数

二进制vs.字符串vs.数字,用于在DynamoDB分区键中存储UUID?

我正在尝试确定对DynamoDB表的分区键使用二进制,数字还是字符串。我的应用程序是React.js / Node.js社交事件管理应用程序,其中存储在DynamoDB中的数据量的一半将用于存储项目和属性与其他项目和属性之间的关系。例如:用户的朋友,活动的参加者等。

因为架构是如此繁琐,并且由于DynamoDB项的最大大小只有400KB,并且出于性能和成本的原因,我担心密钥占用太多空间。就是说,我想使用UUID作为分区键。有众所周知的原因,对于多个节点分发新密钥的分布式无服务器应用程序,他们更喜欢UUID(或类似的熵级别,并且发生碰撞的可能性很小)。

因此,我认为我的选择是:

  1. 使用十六进制编码的UUID(删除破折号后将存储32个字节)
  2. 使用base64(22个字节)编码UUID
  3. 使用z85(20个字节)对UUID进行编码
  4. 对密钥使用二进制类型的属性(16个字节)
  5. 对键使用数字类型的属性(16-18字节吗?)-数字类型只能容纳127位,因此我不得不执行一些技巧,例如剥离版本位,但是对于我的应用程序来说可能还可以。请参阅 在Number类型的DynamoDB属性中可以存储多少位整数数据?有关更多信息。

显然,开发人员的经验需要权衡。使用十六进制字符串最清晰,但最大。编码的字符串较小,但在日志记录,调试等过程中更难处理。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

6
推荐指数
1
解决办法
634
查看次数

发送ArrayBuffer到S3并放置到signedURL

我正在逐步将文件加载到缓冲区中,该缓冲区有效,但是当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)

javascript amazon-s3 filereader ecmascript-6 aws-sdk-js

6
推荐指数
1
解决办法
295
查看次数

如何在 AWS-SDK JS 版本 3 中获取签名的 S3 Url?

我正在遵循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)

amazon-s3 amazon-web-services aws-sdk-nodejs aws-sdk-js

6
推荐指数
2
解决办法
1546
查看次数

Cloudfront 异常“If-Match 版本缺失或对资源无效。” 更新分布时

使用 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)

我在这里做错了什么?

amazon-web-services amazon-cloudfront aws-sdk aws-sdk-js

6
推荐指数
1
解决办法
3919
查看次数

如何使用 Amazon SES API V2 获取 DKIM 和域验证码

为了完成 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.verifyDomainDkimAWS.SESV2使用这两个接口来完成创建电子邮件身份

我正在尝试使用这两个 API …

amazon-web-services amazon-ses aws-sdk-js

6
推荐指数
0
解决办法
163
查看次数

在新的 AWS-SDK.js V3 中使用什么来代替 new CognitoIdentityCredentials() ?

因此,我将我的项目迁移到新的 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?

javascript amazon-web-services aws-sdk aws-sdk-js

6
推荐指数
1
解决办法
1778
查看次数