javascript - S3 连接到应用程序

标签 javascript amazon-web-services amazon-s3 amazon-ec2

我编写了一个应用程序,可以按 ID 显示图像,所有图像都保存并位于 S3 中。 我的 AWS 计算机中有 2 个实例和 1 个 LB,index.js 位于这两个实例中。 在我的 index.js 中,我写入了 S3 存储桶的路径,然后收到如下错误消息:

Blockquote This XML file does not appear to have any style information associated with it. The document tree is shown below.

index.js 中的代码:

//Get Images Names by Id / Color from MongoDB

var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://db_usr:db_pass@ds023550.mlab.com:23550/db_ringapp2016_g');
var userSchema = require('./1_define_schema');
var size = 0;
var express = require('express'),
    url = require('url'),
    app = express();
var fs = require('fs');
var http = require('http');
var Upload = require('s3-uploader');
var restify = require('restify');

app.listen(process.env.PORT || 3000);

// connection error
mongoose.connection.once('error', function (err) {
    console.log('connectiob error' + err);
});

//connecting to DB
mongoose.connection.once('open', function () {
    console.log("============================");
    console.log("Connected Successfully to DB");
    console.log("============================");

    userSchema.find({}, function(err, user){
        if(err) throw err;
        //first route - call first get function from WS.
        app.get('/AllPictures' , 

            function (req, res) {
                console.log("DB: Get all Pictures");
                res.status(200).json(user[0].Name);
        });
    })

    //second route - call second function from WS (by Id).
    app.get('/PicById/:Id/:Size', function (req, res) { 
        userSchema.find({Id:req.params.Id} , function(err, user){
            if(err) throw err;
                console.log("DB: Get Pic by ID: "+req.params.Id+" from MongoDB");
                console.log("Name Pic: "+user[0].Name);
                console.log("Size Pic: "+req.params.Size);
                var temp = user[0].Name.split(".");
                var result = temp[0]+req.params.Size+"."+temp[1];
                console.log(result);
                res.send('<!DOCTYPE HTML><html><head></head><body><img src="https://s3-us-west-2.amazonaws.com/galshaharbucket/'+result+'"></body></html>');
                console.log("============================");
            })
    })

    //thired route - call thired get from WS (by Color).
    app.get('/PicByColor/:Color', function (req, res) { 
        userSchema.find({Color:req.params.Color}, function(err, user){
            if(err) throw err;
            var names = [];
                console.log("DB: Get Pic by Color: "+req.params.Color+" from MongoDB"); 
                console.log("--------------------");
                for(var i = 0; i<user.length; ++i){
                    var temp = user[i].Name.split(".");
                    names [i] = temp[0]+"S."+temp[1];
                    console.log("Name Pic: "+names [i]);
                    console.log("--------------------");
                }
                var temp = [];
                for(var i = 0; i<user.length; ++i){
                    temp [i] = '<img src="https://s3-us-west-2.amazonaws.com/galshaharbucket/'+names [i]+'">'
                }
                var result = temp.join("");
                res.send('<!DOCTYPE HTML><html><head></head><body>'+result+'</body></html>');
                console.log("============================");
            })
    })

    app.get('/GetAllPictures', function (req, res) { 
        userSchema.find({}, function(err, user){
            if(err) throw err;
            var names = [];
                console.log("DB: Get All Pictures from MongoDB");   
                for(var i = 0; i<user.length; ++i){
                    var temp = user[i].Name.split(".");
                    names [i] = temp[0]+"S."+temp[1];
                }
                var temp = [];
                for(var i = 0; i<user.length; ++i){
                    temp [i] = '<img src="https://s3-us-west-2.amazonaws.com/galshaharbucket/'+names [i]+'">'
                }
                var result = temp.join("");
                res.send('<!DOCTYPE HTML><html><head></head><body>'+result+'</body></html>');
                console.log("============================");
            })
    })

    // Upload an image
    app.get('/Upload/:Path', function (req, res) { 
        var knox = require('knox').createClient({
            key: 'AKIAJ4ROKKJBECGFSYIA'
          , secret: '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'
          , bucket: 'galshaharbucket'
        });

        var file = req.params.Path;
            console.log(file);
            var upload_name = "upload_"+ file; // or whatever you want it to be called

            knox.putFile(file, upload_name, {
                 "Content-Type": "image/jpeg"
             }, function (err, result) {
                 if (err != null) {
                     return console.log(err);
                 } else {
                     console.log("Uploaded to amazon S3");
                     console.log("--------------------");
                 }
             });
    })


});


// The function that recieve the name from mongo and display it

function getImageById(){
    Input = document.getElementById("imageId");
    Size = document.getElementById("imageSize");
    size=Size.value;
    alert(size);

    if(Input.value==""){
        alert("Please Enter Id Number Between 1-33");
        return;
    }

        url = "https://s3-us-west-2.amazonaws.com/galshaharbucket/PicById/"+Input.value+"/"+Size.value;
        //url = 'https://s3-us-west-2.amazonaws.com/galshaharbucket/'+name;

        if(Size.value=="L"){
            popupWindow = window.open(
            url,'popUpWindow','height=658,width=1120,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes')
        }

        if(Size.value=="M"){
            popupWindow = window.open(
            url,'popUpWindow','height=525,width=820,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes')
        }

        if(Size.value=="S"){
            popupWindow = window.open(
            url,'popUpWindow','height=330,width=520,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes')
        }
}


function getImageByColor(str){
    Input = document.getElementById("imageColor");

    if(Input.value==""){
        alert("Please Enter a Color: red / green / blue / yellow");
        return;
    }
    else{
        path = "https://s3-us-west-2.amazonaws.com/galshaharbucket/PicByColor/"+Input.value;
        popupWindow = window.open(
        path,'popUpWindow','height=608,width=1020,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes')
    }
}

function uploadImage(){
        var fileChooser = document.getElementById('path');
        var results = document.getElementById('results');
        var file = fileChooser.files[0];
        alert(file.name);
        path = "https://s3-us-west-2.amazonaws.com/galshaharbucket/Upload/"+file.name+"";
        popupWindow = window.open(
        path,'popUpWindow','height=608,width=1020,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes')
}

function getAllPics(){
        path = "https://s3-us-west-2.amazonaws.com/galshaharbucket/GetAllPictures";
        popupWindow = window.open(
        path,'popUpWindow','height=608,width=1020,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes')

}

如何正确显示图像而不出现错误?什么可能导致此错误?

enter image description here

谢谢你, 汤姆

最佳答案

编辑您的存储桶策略并确保具有类似的内容(或使用“存储桶权限”部分下的 AWS 策略生成器)。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::galshaharbucket/*"
        }
    ]
}

如果 galshaharbucket 是您的存储桶名称,则它会授予每个人对指定文件夹中的对象的访问权限。

您可以阅读more about bucket policies

关于javascript - S3 连接到应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37525276/

相关文章:

javascript - 为什么我的代码在innerHtml 上返回 "undefined"?

javascript - 检测浏览器/标签关闭

python - Elastic Beanstalk 不适用于 SQLite

amazon-web-services - 这些 AWS 存储桶策略权限如何发挥作用?

redirect - S3托管+ Api网关

python - 无法实例化 boto3 S3Transfer 类

Javascript:仅允许小于输入初始值的值

javascript - 在 svg 图片的不同部分添加事件监听器

javascript - 是否可以将动态变量传递给 process.env 来获取 env 变量?例如 process.env ['variable name' ]

performance - 哪种引用 S3 文件的方式更好/更快?