我正在尝试上传到S3,而我一直在网络控制台中遇到的错误是


  发送调用“ 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!");
  }

  });
  }


帮助将不胜感激!

最佳答案

在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)都会有一个设置文件,它们都是同一代码库的一部分,并在运行时针对所需环境进行选择。

关于node.js - 如何使用 meteor 弹弓直接上传到Amazon S3?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29586029/

10-11 11:03