【问题标题】:How to corretly upload to Amazon S3 with meteor slingshot?如何使用流星弹弓正确上传到 Amazon S3?
【发布时间】:2015-06-17 14:59:16
【问题描述】:

我正在尝试上传到 S3,但在 Web 控制台中不断出现的错误是

调用'slingshot/uploadRequest'的结果传递异常:TypeError:>无法读取未定义的属性'response'

这是我的服务器端代码:

Slingshot.fileRestrictions("Test1", {
  allowedFileTypes: ["image/png", "image/jpeg", "image/gif"],
  maxSize: 10 * 1024 * 1024 // 10 MB (use null for unlimited)
});


Slingshot.createDirective("Test1", Slingshot.S3Storage, {

  AWSAccessKeyId: "Key",
  AWSSecretAccessKey: "Key",
  bucket: "bucketname",


  acl: "public-read",

  authorize: function () {
    //Deny uploads if user is not logged in.

    },

  key: function (file) {
    //Store file into a directory by the user's username.
    return file.name;
  }

客户端代码:

Template.first.events({
    'change .fileInput': function(event, template) {

      event.preventDefault();

var uploader = new Slingshot.Upload("Test1");
var docc = document.getElementById('fileup').files[0];
console.log(docc);

uploader.send(docc, function (error){
  if (error) {


    console.error('Error uploading', uploader.xhr.response);

    alert (error);
  }
  else{
    console.log("Worked!");
  }

  });
  }

我们将不胜感激!

【问题讨论】:

  • 有两件事我花了一段时间才弄清楚。 1.你设置区域了吗?它默认为“us-east-1”。如果那不是你的,那么你需要告诉 slingshot。 2. S3 配置。您的应用(即 S3 用户)是否有权访问您的存储桶?
  • 我将区域更改为“us-east-1”,但它仍然给我同样的错误。我不确定你所说的第二点是什么意思。
  • 我只是假设您在 IAM 管理控制台中创建了一个用户(您的应用程序)来为您的应用程序生成密钥。在那里你可以授予权限。
  • 错误上有堆栈跟踪吗?如果可以的话可以发一下吗?此外,无需在服务器端创建文件限制,除非您与客户端共享该代码。您可以直接在指令中设置相同的属性。
  • 嗨,你发现是什么问题了吗?我也有同样的问题

标签: node.js amazon-web-services meteor amazon-s3 meteor-slingshot


【解决方案1】:

在 createDirective 命令块中引用区域似乎也很重要,例如

Slingshot.createDirective("Test1", Slingshot.S3Storage, {

  bucket: "bucketname",
  region: "eu-west-1"
  ...

如果没有明确指定区域,我得到的只是“400 - 错误请求”。

AWSAccessKeyId 和 AWSSecretAccessKey 应该放在一个单独的 settings.json 文件中,该文件仅限于您的服务器部署并从源代码管理 (github) 中排除。

settings.json:

{
  "AWSAccessKeyId":     "<insert key id here>",
  "AWSSecretAccessKey": "<insert access key here>"
}

通常,每个环境(dev、acpt、live)都有一个设置文件,所有这些文件都作为同一代码库的一部分,并在运行时为所需的环境选择。

【讨论】:

    【解决方案2】:

    在下一行失败。 xhr 为空

    console.error('Error uploading', uploader.xhr.response);
    

    记录如下错误并从那里调试

    console.error('Error uploading', error);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      相关资源
      最近更新 更多