2016-08-15 22 views
7

我想在我的網站上設置一個小小的上傳部分供用戶上傳個人資料圖像。我用彈弓與谷歌雲和從本地主機測試這一點,但我得到這些錯誤:從本地主機使用流星彈弓包與谷歌雲錯誤

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 
    } 
] 

不過,什麼都沒有。與以前一樣的錯誤。

這是彈弓我的服務器代碼:

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); 
    } 

所有的變量退房。我的文件檢出並正常工作。所以Google Cloud或我設置CORS文件的方式都必須有錯誤。

任何幫助,將不勝感激。

+0

您是否嘗試將POST添加到方法中?例如'「method」:[「GET」,「HEAD」,「DELETE」,「POST」]' – carlevans719

+0

@ carlevans719是的,我添加了POST方法。這是我做的合乎邏輯的第一件事,但沒有任何聯繫。 –

+0

希望看到響應錯誤的全部,而不是例外,但有幾件事情想起來: – Mussser

回答

1

我在這裏有同樣的問題,但調試是更糟糕的。在我的Android應用程序中,上傳工作正常,但在iOS中我得到了同樣的錯誤。

TLDR:請勿在存儲桶名稱中使用點(對於CNAME別名)。礦井工作時,從gs://static.myapp.com更名爲gs://myapp-static。如果需要自定義域,請使用手動Load Balancer。



全文

我鬥被命名爲static.myapp.com,所以我可以在我的DNS提供商創建CNAME記錄,並使用自定義域爲我的圖片。

原來上傳本身是通過url https://<bucket-name>.storage.googleapis.com帶有SSL證書的通配符*.storage.googleapis.com,所以我不得不將其重命名爲myapp-static,以便URL與該證書匹配。

這打破了CNAME方法,但您仍然可以設置手動Load Balancer以隱藏Google Cloud URL並使用自定義子域。下面是我當前的Load Balancer配置的截圖。

enter image description here