javascript - 无法成功上传图片到s3然后查看

标签 javascript node.js express amazon-s3 aws-sdk

作为应用程序的一部分,我正在尝试将图像上传到 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 文件

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;

   }
}

我知道 signs3 函数有效,因为我可以在应用程序的其他部分使用它来上传 JSON 文件。每当我发布到 URL 时,奇怪的是我可以在控制台中看到“来自 putObject 的数据”,但是我看不到的是 nName。我不明白这一点,因为 console.log(nName) 行应该在另一行之前运行。当我去查看存储桶时,图像还没有上传(尽管我从控制台得到了一个 ETag),并且页面没有显示它(我知道这也有效,因为它可以显示已经上传到存储桶的图像).

最佳答案

您想做这样的事情,从 Request object 请求事件当您调用 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 文件)和大文件(图像)的作用不同?因为大文件需要更长的时间才能上传。

关于javascript - 无法成功上传图片到s3然后查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55549081/

相关文章:

javascript - 从上午 9 点到下午 12 点,使用触发器每 30 分钟运行一次脚本

javascript - 如何访问包含在 jquery 文件上传插件中上传的文件列表的数组/对象?

angularjs - Angular 2 npm 安装报错包

node.js - 类型错误 : Cannot read property '_id' of undefined

node.js - 解析expressjs中的url参数 - angularjs应用程序

javascript - 如何在顶部滚动表单面板?

javascript - 将一个类传递给 Vuejs 中的 Prop

node.js - 安装 node.JS 时,node.js 运行时和 npm 包管理器选项有什么区别?

javascript - Jest SecurityError : localStorage is not available for opaque origins

javascript - 浏览器后退按钮不会破坏 PassportJS + ExpressJS 中的 session 。如何完全终止/终止 session ?