直接在 JavaScript 中上传 S3

2023-12-03

我正在尝试完成简单的操作,并直接用 JavaScript 上传到 Amazon S3。我如何以及在哪里隐藏我的访问密钥和秘密密钥?我在他们的文档或本网站上没有看到任何可以回答这个问题的内容。

我正在使用他们推荐的方法在 HTML 中进行设置。我还使用 Backbone 和 Bower。

<script src="https://sdk.amazonaws.com/js/aws-sdk-2.0.25.min.js"></script>
<script type="text/javascript">
  // See the Configuring section to configure credentials in the SDK
  AWS.config.credentials = ...;

  // Configure your region
  AWS.config.region = 'us-west-2';
</script>
<input type="file" id="file-chooser" /> 
<button id="upload-button">Upload to S3</button>
<div id="results"></div>

<script type="text/javascript">
  var bucket = new AWS.S3({params: {Bucket: 'myBucket'}});

  var fileChooser = document.getElementById('file-chooser');
  var button = document.getElementById('upload-button');
  var results = document.getElementById('results');
  button.addEventListener('click', function() {
    var file = fileChooser.files[0];
    if (file) {
      results.innerHTML = '';

      var params = {Key: file.name, ContentType: file.type, Body: file};
      bucket.putObject(params, function (err, data) {
        results.innerHTML = err ? 'ERROR!' : 'UPLOADED.';
      });
    } else {
      results.innerHTML = 'Nothing to upload.';
    }
  }, false);
</script>

您可以使用STS为每次上传生成短期临时凭证,并将其传递给 JS SDK,这样您就不必泄露长期 API 密钥。

使用 AWS PHP SDK 的示例(编写器包:"aws/aws-sdk-php":"~2.4"),假设你的access_key_id and secret_access_key在 ENV 中可用。

草率的例子:

<?php 
include 'vendor/autoload.php';

use Aws\Sts\StsClient;

/** Create Temporary Credentials */
$stsclient = StsClient::factory();
$temp_creds = $stsclient->getSessionToken(900)->get('Credentials'); // 15 minute expiration

?>
<script>
AWS.config.credentials = {
    accessKeyId : '<?php echo $temp_creds['AccessKeyId']; ?>',
    secretAccessKey : '<?php echo $temp_creds['SecretAccessKey']; ?>',
    sessionToken : '<?php echo $temp_creds['SessionToken']; ?>'
};
AWS.config.region = 'your-region';
</script>

这样您就不必透露您的访问权限access_key_id and secret_access_key。 STS生成的密钥将在设定的时间间隔后失效。请务必遵循最佳实践,例如为长期存储的凭证创建角色有限的 IAM 用户。

参考:http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.Sts.StsClient.html#_getSessionToken

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

直接在 JavaScript 中上传 S3 的相关文章

随机推荐

  • memmove 和 memcpy 有什么区别?

    有什么区别memmove and memcpy 您通常使用哪一种以及如何使用 With memcpy 目标根本不能与源重叠 和memmove它可以 这意味着memmove可能比memcpy 因为它不能做出相同的假设 例如 memcpy可能总
  • 使用 HTML,如何将文件作为 Excel 文件打开?

    我有一个名为new xls我已经保存在 html格式为new html 我已经删除了扩展名 因此文件名只是new 现在如果我将文件重命名为new xls 对于以下代码
  • java.util.zip.ZipException:重复条目:android/support/v4/view/MotionEventCompatEclair.class

    我是 android studio 的新手 正在尝试从 eclipse 导入一个项目 但我觉得我遇到了所有可能的问题 我目前收到的错误是 Error Execution failed for task jobFlexwithInvoice
  • 将TextureView上显示的帧录制为mp4

    我设法编写了一个在TextureView上显示3D模型的演示 并且该模型可以根据手机的传感器移动 3D引擎是用C 编写的 我需要做的就是将TextureView的SurfaceTexture给3D引擎 引擎调用函数 ANativeWindo
  • 使用 python azure 函数从 azure blob 存储读取文件

    我创建了一个天蓝色函数Python 3 9我将使用执行该功能Http Trigger via Azure data factory 现在 在我的 python azure 函数中 我想从我的存储帐户访问存储容器并从同一容器读取文件 以便对文
  • Rails 创建连接表不需要在迁移中添加主键?

    我使用这个命令 rails g migration CreateJoinTableUserPloy user ploy 我检查了迁移文件 create join table Users Posts do t t index user id
  • 如何使用 jQuery Tablesorter 对包含两个 div 的列进行排序?

    我在用着jQuery 表排序器对表进行排序 我的其中一篇专栏如下所示 td div span class green Yes span a href unverify a div div class hidden span class re
  • Gson:java.lang.StackOverflowError: null

    我有一个类Delete 我想使用Gson库将其转换为json 但是当我转换它时 它会抛出异常java lang StackOverflowError null这是我的课 import models UserNotifications Mai
  • 了解上周有多少用户连接到我的计算机,以及每个用户连接了多少次

    我需要一个脚本来显示上周连接到我的计算机的用户及其频率的摘要 我知道我可以使用last并过滤时间列awk 但是如何呢 我必须让每个用户在上周连接并计算连接数加上所有连接的总时间 这是我到目前为止所想出的 for USER in last a
  • 一个有趣的图形任务

    一棵树有n个顶点 我们被要求计算多重集 S 的最小大小 使得树中的每条边 u v 至少满足以下条件之一 你 in S v S S 中至少有两个顶点 每个顶点都与 u 或 v 相邻 由于 S 是多重集 因此一个顶点可能多次出现在 S 中 我的
  • 我如何检查哪些所有用户都登录到我的应用程序

    我有一个基于网络的应用程序 它使用用户名和密码进行登录 现在我如何检查所有用户在该时间登录的特定时间 我正在使用会话管理 并且应用程序中没有使用数据库 所有内容都在文件系统上 编辑 1个更愚蠢的疑问 如何定义具有应用程序范围的变量 是这样的
  • 带 bo​​ost 的类型列表

    在我继续之前 boost 中是否已经有一个类型列表实现或使用它的小型实现 到目前为止我还没有发现任何有用的东西 我正在尝试使用 boost pp 生成各种大小的列表类 define BOOST PP LOCAL MACRO n templa
  • JSP:制作可重用的代码(标签、宏)并在同一页面上使用

    有没有办法在一个 JSP 页面上制作某种参数化宏 并在同一页面上重复使用它几次 可以使用 JSP 标签 但我必须为每个标签创建一个文件 多年来我一直想要这个功能 在再次谷歌搜索后 我编写了自己的功能 我认为标签 jsp 文件和自定义标签类很
  • mdOption 的 (onSelectChange) 输出始终传递列表中的第一项

    我正在使用 Angular 4 4 3 4 的 Angular Material 我需要挂钩选择事件以清除输入并将对象存储在单独的列表中 但有一个问题 onSelectChange 输出始终获取第一项作为参数 这是怎么回事 这是我的模板
  • 使用数据框中的另一列标记 x 轴

    我有一个从运行 GWAS 的输出得出的数据帧 每行都是基因组中的一个 SNP 及其染色体 位置和 P 值 从这个数据框中 我想生成一个曼哈顿图 其中 x 轴从 Chr 1 上的第一个 SNP 到 Chr 5 上的最后一个 SNP y 轴是
  • 如何在 selenium C# 中启用 Chromium Edge 浏览器中的 IE 模式?

    我想在 Edge 中自动化一个需要启用 IE 模式的网站 如何在selenium中以IE模式启动Edge 我当前使用的以下代码在非 IE 模式下启动 Edge 这将无法正确显示网站 Dim edgeDriverService Microso
  • Java 8 中强可达对象上的 Finalize() 调用

    我们最近将消息处理应用程序从 Java 7 升级到 Java 8 自升级以来 我们偶尔会遇到一个异常 即流在读取时已关闭 日志显示终结器线程正在调用finalize 在保存流的对象上 进而关闭流 代码的基本轮廓如下 MIMEWriter w
  • 我无法在 Swift iOS 中创建 UIResponder nextResponder

    我有一个类 ASTextField 它在 UITextField 之后扩展 我想定义 textFieldResponder 有什么解决方案可以在 Swift 中写在下面一行吗 UIResponder nextResponder textFi
  • Switch Case 和 if else if 哪个更快更好?

    哪种方法更好 最快 if 或switch if x 1 echo hi else if x 2 echo bye switch x case 1 break default 你的第一个例子是完全错误的 你需要elseif而不仅仅是else
  • 直接在 JavaScript 中上传 S3

    我正在尝试完成简单的操作 并直接用 JavaScript 上传到 Amazon S3 我如何以及在哪里隐藏我的访问密钥和秘密密钥 我在他们的文档或本网站上没有看到任何可以回答这个问题的内容 我正在使用他们推荐的方法在 HTML 中进行设置