Невозможно успешно загрузить изображения в s3, а затем просмотреть их - PullRequest
1 голос
/ 06 апреля 2019

Я пытаюсь загрузить изображения в корзину s3 как часть приложения.
index.js

  function upImg(req) {
    if(req.files.img) {
      var img = req.files.image;
      var name = Math.round(Math.random()*10000).toString(); // Returns a random 5 digit number
      if(myDB.uploadImg(img, name)) {
        return name;
      } else {
        return "";
      } 
    } else {
      return "";
  }
}

app.post('/newEV*', isLoggedIn, function(req, res) {
  var myURL = req.path.replace('/newEV', '');
  var imgPath = upImg(req);

  fetch(myURL).then(function (events){
    var myID;
    var x = 0;
    while(!myID) {
      if(!events[x]) {
        myID = x;
      } else {
        x++;
      }
    }
    myDB.newEvent(myURL, req.body.name, req.body.desc, req.body.loc, imgPath, req.body.link, req.body.cap, req.body.date, req.body.time, myID, events);
    res.redirect('/edit' + myURL);
  });

});

myDB file

function signs3(file, name)  {
    devs3();
    const s3 = new aws.S3();
    const s3Params = {
        Body: file,
        Bucket: S3_BUCKET,
        Key: name
    };

    s3.putObject(s3Params, function(err, data) {
        if(err) {
            throw err;
        } else {
            console.log("Data from putObject:" + JSON.stringify(data));  
        }
    });
}
module.exports = {

    uploadImg : function(file, name) {
        var nName = "imgs/" + name;
        console.log(nName);
        signs3(file, nName);
        return true;

   }
}

Я знаю, что функция sign3 работает, потому что я могу использовать ее в других частях моего приложения для загрузки файлов JSON. Всякий раз, когда я отправляю по URL, довольно странно, что я вижу в консоли «данные из putObject», однако я не вижу nName. Я не понимаю этого, так как строка console.log(nName) должна быть запущена раньше другой. Когда я иду, чтобы посмотреть на корзину, изображение не загружено (несмотря на то, что я получаю ETag из консоли), и страница не отображает его там (я знаю, что это также работает, потому что оно может отображать изображения, уже загруженные в корзину). ).

1 Ответ

1 голос
/ 06 апреля 2019

Вы хотите сделать что-то подобное, запрашивая события у объекта запроса , созданного при вызове putObject .

const req = s3.putObject( s3Params )
req.on('success', res => {
  console.log ('upload complete! );
});
req.on ('error', res => {
  console.error (res.error');
});
req.send();

Почему это работаетпо-разному для небольших файлов (JSON-файлов) и больших файлов (изображений)?Поскольку загрузка больших файлов занимает больше времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...