当前位置: 首页 > 知识库问答 >
问题:

上载到已签名的AWS S3 Put URL将返回“永久重定向”

华旭
2023-03-14

我的目标是创建一个Lamda函数,该函数执行一些权限检查(通过外部API),然后签署URL以允许上传到S3。

我创建了以下AWS lambda函数:

var AWS = require('aws-sdk');
var uuid = require('uuid');
exports.handler = function(event, context) {
    // Some Auth Code is here to make sure user has permission
    var s3 = new AWS.S3();
    var url = s3.getSignedUrl('putObject', {
      Bucket: config.uploadBucket,
      Key: event.partnerName + '/images/' + uuid.v4()
    });
    context.succeed(JSON.stringify({
      url: url
    }));
}

我拿回一个URL!

https://s3-us-west-2.amazonaws.com/PATH/images/3f7ff785-1868-4a54-9ae2-e94228d4868d?AWSAccessKeyId=....

然后我创建了一个JSBin来测试它

<form method="POST" action="THE_URL_I_GOT">
  <input name="file" type="file"/>
  <input type="submit"/>
  </form>

但是当我试图上传一个文件时

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>PermanentRedirect</Code>
    <Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message>
    <Bucket>MYBUCKETNAMEHERE</Bucket>
    <Endpoint>s3.amazonaws.com</Endpoint>
    <RequestId>...</RequestId>
    <HostId>.....</HostId>
</Error>

还有,事实证明,我无法将文件作为多部分表单上传。相反,我必须使用XMLHttpRequest将文件作为二进制文件发送到签名的url(https://devcenter.heroku.com/articles/s3-upload-node#direct-上传)

共有1个答案

宋嘉禧
2023-03-14

您的铲斗位于美国标准区域。

您需要使用美国标准endpoint生成预签名上传URL。

 类似资料:
  • 我是AWS s3的新手,正在尝试如何在php中使用它。我开始使用,我可以使用s3列出我的所有存储桶- PHP致命错误:未捕获Aws\S3\Exception\PermanentRedirectException:在请求时遇到永久重定向https://s3.us-east-2.amazonaws.com/ischool.simplein?encoding-类型=url。您确定为此存储桶使用了正确的区

  • 但是同时使用不同签名和不同返回类型的重载方法有什么问题呢?为什么这会产生错误?

  • 我正在构建一些函数,以使用sign client PHP API和模型创建JSON。我正在使用API在docusign上创建一个信封,并向签名者发送电子邮件,让他们在docusign上签名。我没有使用嵌入式签名。我在API和plan to get以及API plan中这样做,所以不会有所有基于web的访问。 我有一个或多个签名者,在他们签名后,我需要将他们指向我网站上的URL,在那里他们可以付款。

  • 有没有办法让预签名的aws上传URL在出现错误时返回json响应,而不是xml响应。 目前,如果url过期,它会返回如下内容。 如果这是json响应就好了。

  • 问题内容: 我想使用Bouncycastle生成一个简单的CMS签名。此代码有效! 但是,如何添加签名属性? 我想删除默认的签名属性并添加signature-policy-identifier。 文章非常受欢迎。 问题答案: 首先,您似乎正在使用最新版本的Bouncy Castle中不推荐使用的构造。要添加经过身份验证/签名的属性,您必须将它们打包到AttributeTable中,将签名的属性添加

  • 5xx永久性否定 永久性否定的完成答复,该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。 500语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。 501在参数中有语法错误。 502未执行命令。 503错误的命令序列。 504未执行该参数的命令。 530未登录。 532存储文件需要帐户。 550未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。 55