首页 > 解决方案 > 使用 nodeJs 中的 AWS lambda 函数提取 S3 Bucket 中的 zip 文件“错误:CEN 标头无效(签名错误)”

问题描述

我正在努力解压缩 AWS S3 中的内容。AWS S3 不提供直接解压 S3 存储桶中的 zip 文件夹的功能。我面临一个错误。附上上传代码截图。“错误:CEN 标头无效(签名错误)”在此处输入图像描述 在此处输入图像描述

任何建议或指导将不胜感激。

我的节点 Js 代码上传 zip 文件:

 const AWS = require('aws-sdk');
 const s3 = new AWS.S3({signatureVersion: 'v4'});
 exports.handler = async (event,context) => {
 const bucket = 'bucket-name';
 console.log(event)
 const body = event.body;
 const key=JSON.parse(body).key
 console.log(key)
 const params = {
 Bucket: bucket,
 Key: key,
 ContentType: 'application/zip',
 Expires: 60
};
try{
const signedURL = await s3.getSignedUrl('putObject', params);
const response = {
    err:{},
    body:"url send",
    url:signedURL
  };
  return response;
 }catch(e){
    const response = {
    err:e.message,
    body:"error occured"
   };
  return response;
  }};

我提取 zip 文件的 NodeJs 代码:

const S3Unzip = require('s3-unzip'); 

exports.s3_unzip = function(event, context, callback) { 
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const bucketname = event.Records[0].s3.bucket.name;
console.log(event.Records[0].s3.object.key);

new S3Unzip({ 
    bucket: bucketname, 
    file: filename,
    deleteOnSuccess: true,
    verbose: true, 
}, function(err, success) { 
    if (err) { 
        callback(err); 
    } else { 
        callback(null); 
    } 
});
}

标签: node.jsamazon-web-servicesamazon-s3

解决方案


推荐阅读