使用Meteor的Slingshot软件包与localhost

时间:2016-08-15 18:23:55

标签: meteor meteor-slingshot

我正在尝试在我的网站上设置一个小的上传部分,供用户上传个人资料图片。我正在将Slingshot与Google Cloud一起使用并从localhost进行测试,但我收到了以下错误:

OPTIONS https://mybucket.storage.googleapis.com/ net::ERR_INSECURE_RESPONSE

enter image description here

我认为这个错误是因为我的CORS配置,所以我尝试了各种不同的设置,没有任何作用。

这是我最近的CORS设置:

[
    {
      "origin": ["http://localhost:3000/"],
      "responseHeader": ["Content-Type"],
      "method": ["GET", "HEAD", "DELETE"],
      "maxAgeSeconds": 3600
    }
]

我也是这样尝试的:

[
    {
      "origin": ["*"],
      "responseHeader": ["*"],
      "method": ["GET", "HEAD", "DELETE"],
      "maxAgeSeconds": 3600
    }
]

仍然没有。与以前相同的错误。

这是Slingshot的服务器代码:

if(Meteor.isServer){

// Initiate file upload restrictions
  Slingshot.fileRestrictions("userLogoUpload", {
  //Only images are allowed
  allowedFileTypes: ["image/png", "image/jpeg", "image/gif"],
  //Maximum file size:
  maxSize: 2 * 1024 * 1024 // 2 MB (null for unlimited)
});

  // Google Cloud Directives
  Slingshot.createDirective("userLogoUpload", Slingshot.GoogleCloud, {
    bucket: Meteor.settings.public.GoogleCloudBucket,
    GoogleAccessId: Meteor.settings.private.GoogleAccessId,
    GoogleSecretKey: Assets.getText("xxxxxxxxxx.pem"),
    // Uploaded files are publicly readable
    acl: "public-read",
    authorize: function(){
      if(!Meteor.userId()){
        throw new Meteor.error("Login Required", "Please log in to upload files");
      }
      return true;
    },
    key: function(file){
      let user = Meteor.users.findOne(Meteor.userId());
      return user.profile.username + "/" + file.name;
    }

});
}

以下是客户端上传启动:

let uploader = new Slingshot.Upload("userLogoUpload");
uploader.send(document.getElementById("upload").files[0], function(error, downloadUrl){
  if(!error){
    console.log(downloadUrl);
  } else{
    console.error('Error uploading', uploader.xhr.response);
    console.log(error);
  }

检查所有变量。我的pem文件检出并正常工作。因此,Google Cloud或我设置CORS文件的方式都会出错。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我在这里遇到了同样的问题,但调试情况要糟糕得多。在我的Android应用程序中,上传工作正常,但在iOS中我遇到了同样的错误。

TLDR:请勿在存储桶名称中使用点(对于CNAME别名)。从gs://static.myapp.com重命名为gs://myapp-static时,我的工作正常。如果需要自定义域,请使用手动Load Balancer。



全文

我的广告素材已命名为static.myapp.com,因此我可以在DNS提供商中创建CNAME记录,并使用自定义域投放我的图片。

结果显示上传本身是通过网址https://<bucket-name>.storage.googleapis.com使用通配符*.storage.googleapis.com的SSL证书,因此我被迫将存储桶重命名为myapp-static,因此网址与证书相匹配

这会破坏CNAME方法,但您仍然可以设置手动Load Balancer来隐藏Google Cloud URL并使用自定义子域。下面是我当前的Load Balancer配置的截图。

enter image description here