Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与web工作人员一起使用AWS SDK_Javascript_Cordova_Amazon Web Services_Amazon S3_Ionic Framework - Fatal编程技术网

Javascript 与web工作人员一起使用AWS SDK

Javascript 与web工作人员一起使用AWS SDK,javascript,cordova,amazon-web-services,amazon-s3,ionic-framework,Javascript,Cordova,Amazon Web Services,Amazon S3,Ionic Framework,这里是爱奥尼亚/科尔多瓦/安格鲁的总noob。上周开始的,所以我在这里挣扎。我正在尝试从一个应用程序(在iOS上)上传文件,该应用程序是使用Ionic和Cordova创建的。这些文件是图像,因此非常大。我想在后台工作线程中上传这些图像。因此需要网络工作者 这些图片必须上传到AmazonS3。我的worker javascript文件中有以下代码 onmessage = function(e) { importScripts("aws-sdk.min.js"); console.log("

这里是爱奥尼亚/科尔多瓦/安格鲁的总noob。上周开始的,所以我在这里挣扎。我正在尝试从一个应用程序(在iOS上)上传文件,该应用程序是使用Ionic和Cordova创建的。这些文件是图像,因此非常大。我想在后台工作线程中上传这些图像。因此需要网络工作者

这些图片必须上传到AmazonS3。我的worker javascript文件中有以下代码

onmessage = function(e) {
  importScripts("aws-sdk.min.js");
  console.log("Doing work");
  self.AWS.config.region = 'us-east-1';  //Error here. config is not defined :(
  self.AWS.config.update({accessKeyId: 'XXX', secretAccessKey: 'ABCD'});
  //More AWS stuff
  postMessage("DONE");
}

我的主javascript文件很好,因为我用非AWS配置(普通的
console.log(“stuff here”))
试用了它,效果很好。只要我尝试使用AWS SDK做任何事情,它就会开始失败。另外,
aws sdk.min.js
正在正确导入(至少Chrome在控制台上没有显示错误)。

我以前在网页上这样做过。尽管如此,我听说向公众公开你的秘密密钥是一种非常糟糕的做法。我认为大多数人都有一个服务器或lambda实例来对上传进行签名。然而,这对于原型来说是很好的

不管怎么说,这个代码对我有用

var accessKeyId = "public key here"
var secretAccessKey =  "secret key here" // secret key. This should be hidden. Maybe on a server or lambda instance. 
var bucketName = "my-new-bucket"
var region = "us-west-2"
//make bucket
AWS.config.update({accessKeyId: accessKeyId, secretAccessKey: secretAccessKey})
AWS.config.region = region
var bucket = new AWS.S3({
  params: {
    Bucket: bucketName
  }
})
// upload something into bucket
//    note: you need to define a callbackFunction
bucket.putObject({
  Key: "test.txt,
  Body: "hello world. this is just a test."
}, callbackFunction)

本例上载了一个文本文件,但也可以上载图像的Blob

啊哈,这似乎解决了我的问题

有趣的是,它不适用于aws-sdk-2.2.3,但适用于示例中所示的版本

网址:

  // this was the trick I needed to get the aws sdk to load.
  // web workers don't have a 'window' object but the library assumes 
  // there is a window object
  window = {};
  importScripts('https://sdk.amazonaws.com/js/aws-sdk-2.1.27.min.js');

  // initialize our dynamodb table and get it ready to accept values
  window.AWS.config.update({accessKeyId: 'XXXXXXXXXX', secretAccessKey: 'XXXXXXXJJJJXXXXX'});
  window.AWS.config.region = 'us-east-1';
  var table = new window.AWS.DynamoDB({params: {TableName: 'song_player_metrics'}});
我的问题是“如何与Webworkers一起使用AWS”,而不是“如何使用AWS”。对于密钥使用部分,您应该使用Cognito