我正在尝试将图像上传到S3但是当我调用s3.putObject(params,callback)时,我的回调永远不会被调用,也不会记录任何错误。

这是相关的代码:

var params = {
  Key: key,
  Body: imageData,
  ContentLength: imageData.byteCount,
  ContentType: contentType,
};
this.s3.putObject(params, function(err, data) {
  console.log('here');
  if (err) {
    callback(err);
    return;
  }
  callback(null, key);
});

其中params是{ Key: 'e2f99bf3a321282cc7dfaef69fe8ca62.jpg', Body: {imageData parsed from request using node-multiparty}, ContentLength: 27802, ContentType: 'image/jpeg', }

我已经验证this.s3是有效的,并且this.s3.ObjectObject的typeof按预期运行。

===============>>#1 票数:6

如果此代码用于lambda函数,则需要在putObject的回调函数中添加context.done(),如下所示:

        s3.putObject(params, function(err, data) {
            if (err) console.log(err, err.stack); // an error occurred
            else     console.log(data);           // successful response
            context.done();
        });

这会强制执行等待回调在退出之前完成。 为此,您还需要从主处理程序中删除任何context.succeed或context.done(如果有的话)。

===============>>#2 票数:1

我对所有IAM权利都有完全相同的行为,并且在我开始工作之前失去了一点时间。

如果您的lambda函数在VPC内部运行,则必须为 AWS 创建一个端点,AWS博客的本文所述。

如果要查看挂起的详细信息,可以使用以下代码。 不要给出回调,而是保留对请求的引用并基本观察它的事件(参见S3.putObjectAWS.Request的文档)。

var obj = s3.putObject(params);
obj.on('validate',             (...args)=>{args.unshift('validate');             console.log(...args);})
   .on('build',                (...args)=>{args.unshift('build');                console.log(...args);})
   .on('sign',                 (...args)=>{args.unshift('sign');                 console.log(...args);})
   .on('send',                 (...args)=>{args.unshift('send');                 console.log(...args);})
   .on('retry',                (...args)=>{args.unshift('retry');                console.log(...args);})
   .on('extractError',         (...args)=>{args.unshift('extractError');         console.log(...args);})
   .on('extractData',          (...args)=>{args.unshift('extractData');          console.log(...args);})
   .on('success',              (...args)=>{args.unshift('success');              console.log(...args);})
   .on('error',                (...args)=>{args.unshift('error');                console.log(...args);})
   .on('complete',             (...args)=>{args.unshift('complete');             console.log(...args);})
   .on('httpHeaders',          (...args)=>{args.unshift('httpHeaders');          console.log(...args);})
   .on('httpData',             (...args)=>{args.unshift('httpData');             console.log(...args);})
   .on('httpUploadProgress',   (...args)=>{args.unshift('httpUploadProgress');   console.log(...args);})
   .on('httpDownloadProgress', (...args)=>{args.unshift('httpDownloadProgress'); console.log(...args);})
   .on('httpError',            (...args)=>{args.unshift('httpError');            console.log(...args);})
   .on('httpDone',             (...args)=>{args.unshift('httpDone');             console.log(...args);})
   .send();

通过这样做,我得到了底层的HTTP请求试图到达桶的公共URL,除非你有端点,否则这是不可能的。

以下是关于从AWS博客也从VPC访问AWS资源的另一篇文章

  ask by Andrew Rasmussen translate from so

未解决问题?本站智能推荐:

2回复

尝试在S3.putobject之后调用回调

是aws和javascript的新功能,我正在尝试实现以下目标,使用二进制支持上传照片,并在我的返回值上添加状态参数,以便稍后在API Gateway中使用 如果我注释掉回调行,代码可以正常工作,否则崩溃。 任何有关如何解决它的提示将不胜感激
1回复

aws s3 putObject vs sync

我需要将一个大文件上传到aws s3存储桶。 在每10分钟我的代码从源目录中删除旧文件并生成一个新文件。 文件大小约为500 MB。 现在我使用s3.putObject()方法在创建后上传每个文件。 我也听说过aws s3同步。 它带来了aws-cli。 它用于将文件上传到s3存储桶
1回复

如何使用putObject从Node.js将CSV文件上传到AWS S3?

我尝试直接将文件流作为参数上传,但是没有用。 如何使用?
1回复

亚马逊nodejs Aws-SDK S3 SignedUrl“回调”

目前,我为我的nodejs-webapp开发了一个小图像上传器。 每个用户都有权上传10张图像(例如)。 应该在客户端执行上载以减少服务器工作量。 因此,我在服务器端生成一个签名的URL并将其发送给客户端: 效果很好,但是如何控制最多10张图像和上传的一般状态? 一种可能
1回复

在大于1MB的文件上,putObject()超时

当尝试使用putObject()函数将CSV文件上传到我的S3存储桶时,如果文件大于大约1 MB,则会超时。 我能够成功上传的最大CSV文件为1048 KB(25500行),在我尝试上传的6次中,只有4次成功。 任何小于1 MB的文件都可以快速上传而不会失败。 一旦功能达到约1 MB的阈值
1回复

aws-sdk putObject访问被拒绝的Request.extractError

我对正在使用的IAM用户附加了以下策略。 问题是当我做类似的事情时: 我得到: 怎么了 看起来当我使用listBuckets ,我从其他S3帐户获取内容。 似乎我配置SDK的方式不正确?
1回复

使用NodeJS回调上传到S3存储桶必须是一项功能。 收到未定义

尝试上传到NodeJS中的S3存储桶,但我不断收到此错误: 这是我的脚本进行上传: 我在这里感到困惑,因为我上载了回调吗? 而且很多都是从AWS示例中复制并粘贴的。
1回复

当对象不存在时,headObject永远不会抛出错误

我目前正在尝试检查文件是否存在,使用适用于Amazon s3的aws-sdk(更确切地说,函数headObject)。 因为我可以随处读取,这是在尝试检查文件是否存在时应该使用的函数(为了通过getSignedUrl获取其URL),但是我无法使其工作。 似乎无论我做什么,函数s3.h
1回复

Lambda函数中未运行S3 API的getObject回调内部的任何操作

我遇到了无法从S3读取文件的问题,甚至无法进入S3回调。 我在lambda上使用的是节点8.10,并且已经验证了一切都在运行,直到尝试进入getObject为止-下面的console.log甚至无法运行。 这里有什么歪斜的地方吗? 我已授予对lambda和S3的完全访问权限,所以我认为这不
1回复

S3 listObjects API返回错误的数据

我在S3中具有以下文件夹结构。 照片/ id1 /图库/ pic1 照片/ id2 /图库/ pic2 照片/ id3 /菜单/ pic3 我已经编写了以下代码段,以列出每个ID中的图片 以上代码段的预期结果是 ['id1 / gallery / pi