问题标签 [pre-signed-url]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1777 浏览

amazon-s3 - 是否可以使用预签名的 url 将文件上传到 AWS S3

我正在尝试使用预先设置的 url 将文件上传到 S3,直到几分钟前我才相信这是可能的(有关于这个问题的文档),但我刚刚在 S3 开发人员指南中遇到了这个短语:

我错过了什么,顺便说一句,我正在尝试使用 goamz(AWS 的非官方 golang SDK)这样做,但我不断收到签名错误。

编辑:到目前为止,我找到了签名,所以我可以为 GET、POST、PUT 签名 URL(我没有尝试过 DELETE 或 PATCH,如果亚马逊部分支持它们,它们也可以工作),现在我的问题是我 PUT 后得到零大小的对象吗),当我让它工作时,我会在这里发布代码。

EDIT2:正如@Basssethog 下面提到的那样,这个问题现在在官方的go-SDK中得到了解决

0 投票
2 回答
2882 浏览

ruby - amazon s3 upload signed url public-read

This is the URL generated by the Ruby aws-sdk gem for put:

-H "x-amz-acl=public-read" is not present in the signature. The signature is OK (Amazon doesn't show any errors).

But the "public-read" permission is not applied, please advise me as to how I can generate a put signed URL which will be public-read after upload.

Thanks!

Updated:

0 投票
2 回答
4735 浏览

ruby - 使用 Fog 和 Ruby 生成预签名 URL 以将文件放入 Amazon S3

我正在使用 Fog gem 来生成预签名的 url。我可以成功地做到这一点以获得对文件的读取权限。这就是我所做的:

但是当我尝试上传文件时这不起作用。有没有办法指定 http 动词,使其成为 PUT 而不是 GET?

编辑我看到了一种方法:put_object_url这可能会有所帮助。我不知道如何访问它。

谢谢

根据您的建议进行编辑:

它有帮助——它给了我一个 PUT——而不是 GET。但是,我仍然遇到问题。我添加了内容类型:

但网址中不包含该网址Content-Type。当从 HTML 中的 Javascript 完成时,我得到Content-Type了 url,这似乎有效。这是雾的问题吗?还是我的标题不正确?

0 投票
3 回答
17710 浏览

javascript - 通过 AWS 开发工具包创建签名的 S3 和 Cloudfront URL

是否有人成功使用 AWS 开发工具包为 S3 存储桶中的对象生成签名 URL,这些对象也可以在 CloudFront 上运行?我正在使用JavaScript AWS SDK,通过 S3 链接生成签名 URL 非常简单。我刚刚创建了一个私有存储桶并使用以下代码生成 URL:

这很好用,但我还想向我的用户公开一个 CloudFront URL,以便他们可以通过使用 CDN 获得更高的下载速度。我设置了一个 CloudFront 分配,它修改了存储桶策略以允许访问。然而,在这样做之后,任何文件都可以通过 CloudFront URL 访问,亚马逊似乎忽略了我链接中的签名。在阅读了更多关于此的内容后,我看到人们生成一个 .pem 文件以获取与 CloudFront 一起使用的签名 URL,但为什么 S3 不需要这样做?似乎 getSignedUrl 方法只是使用 AWS 密钥和 AWS 访问密钥进行签名。以前有没有人得到过这样的设置?

更新: 经过进一步研究,CloudFront 处理的 URL 签名似乎与 S3 [link]完全不同。但是,我仍然不清楚如何使用 Javascript 创建签名的 CloudFront URL。

0 投票
1 回答
4293 浏览

ios - 我使用预签名 URL 将文件上传到 AWS S3 的代码有什么问题?

我想使用预签名 URL 将文件从 iOS 应用程序上传到 AWS S3 存储桶。该 URL 是正确的,因为它适用于命令行上的 curl。

使用以下 Objective-C 代码...

...我收到此错误:

我用WireShark看有没有流量,流量很大。

我不知道我的代码有什么问题。文件传输似乎没有正确终止。

0 投票
2 回答
1648 浏览

php - 生成 CloudFront 签名 URL 时性能下降

我正在按照此示例使用 PHP http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CreateURL_PHP.html在 CloudFront 上创建签名 URL

而且我一切正常,并为 RTMP 分发和 HTTP 分发生成了签名 URL。

但是我注意到生成签名 URL 需要相当长的时间,我想知道在生产环境中使用数千个请求时会产生什么影响。

我做了一些测试,似乎花了很长时间是由于 php-openssl 功能。

这是代码:

这与 CloudFront 在其文档中的示例基本相同。然后我创建了一个控制器,我调用 get_signed_stream_name() 来生成签名的 url。我决定做一个while循环来看看创建500个签名的url需要多长时间。

在我的本地机器上,在 while 循环中生成 500 个签名的 url 大约需要 11 秒。然后我决定改变这样的:

看看如果除了调用 php-openssl 函数 openssl_get_privatekey()、openssl_sign()、openssl_free_key() 之外的所有内容都运行时会发生什么。

我用 500 while 循环运行了相同的脚本,它花了 0.090 秒。所以基本上 php-openssl 函数使脚本变慢了很多。这是我应该担心的事情吗,这是正常的,因为我正在生成这些签名的 url 并且需要相当大的处理能力?

我做了几次尝试,这里是每个 3 次的示例时间。

另外,我想知道如何创建适用于发行版中任何文件的签名。一个通配符,我可以生成一个签名,该签名可用于该文件夹或发行版下的所有文件。我在某个地方读到它是可能的,但不确定如何使用上面的这些示例。也许如果我可以为每个请求而不是为请求中返回的每个文件创建一个签名,那么密集度会降低。

谢谢!

0 投票
1 回答
2264 浏览

node.js - nodejs - 使用 fs.createReadStream、requestjs、流和 AWS S3 预签名 url 上传会引发错误

我的环境:Windows 8.1,NodeJS 0.10.0 请求 2.30.0

这是我根据 Amazon SDK 中的示例和 requestjs 文档尝试的

这是我得到的错误

但是,当我使用 fs.readFile 时,而不是使用 fs.createReadStream ,如下所示,一切正常

请注意,我几乎一字不差地遵循了此处的流式传输示例https://github.com/mikeal/request 。

由于我想在多个地方使用流媒体,因此我很感激有关不正确之处的指示。

0 投票
5 回答
78346 浏览

amazon-web-services - 没有到期日期的 AWS S3 预签名 URL

有什么方法可以生成没有任何到期日期的预签名 URL?我正在开发一个电子邮件应用程序,我的附件将保存在 S3 中。另外请让我知道通过 JavaScript SDK 下载附件的最佳方式是什么。

我正在使用下面的代码

0 投票
2 回答
14739 浏览

node.js - 从我的节点服务器上的 AWS S3 获取签名 URL

解决了:

我想从我的amazon S3 服务器获取签名 URL。我是AWS新手。我在哪里设置我的密钥access_id_key以便S3识别来自我的服务器的请求。

0 投票
3 回答
8817 浏览

node.js - 预签名的 S3 URL 签名不匹配

标题说明了一切。这是我的代码;

我正在对文件使用 node-formidable。

上传成功后,url变量返回s3 url,类似这样;

https://bucket-name.s3.amazonaws.com/746575308_8c081369df.jpg?AWSAccessKeyId=[key]&Expires=[date]&Signature=[signature]&x-amz-acl=public-read

但仍然收到 SignatureDoesNotMatch 错误。在描述中说

我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。

这是我的参数

我错过了什么?