Get "TypeError: Key must be a buffer" when DELETE an Object using "ibm-cos-sdk"

Get "TypeError: Key must be a buffer" when DELETE an Object using "ibm-cos-sdk"

我想实施 REST API 来控制对 IBM Bluemix 对象存储的访问。 POST 方法已实现并且工作正常,但是删除创建的对象时出现问题,因为我得到以下错误:

TypeError: Key must be a buffer

代码如下所示:

var AWS = require('ibm-cos-sdk');
var util = require('util');
var config = {
  endpoint: <endpoint url>,
  apiKeyId: <api key code>,
  ibmAuthEndpoint: 'https://iam.ng.bluemix.net/oidc/token',
  serviceInstanceId: <instance code>,
  signatureVersion: 'v4'
};

var cos = new AWS.S3(config);

app.delete('/<path>/:id',function(req, res){
  cos.deleteObject({
    Bucket: <bucket>,
    Key: req.params.id + '.pdf'
  }, function(err, data){
    if(err){
      console.log("ERROR: " + err);
      res.send({"message":"error: " + err});
    } else {
      console.log("data: " + data);
      res.send({"message": "success"});
    }
  });
});

有人知道这个问题并可以提供帮助吗?

看起来这个问题是当加密库之一遇到类似于字符串或缓冲区但实际上不是一个的字符串或缓冲区时。我有点好奇这是怎么发生的,不过对于这个问题应该无关紧要。

事实证明这是由 signatureVersion: v4 引起的,它具有不需要的 SDK 构建签名。从您的配置中删除 signatureVersion 应该可以修复它。这将默认返回 iam 签名类型,这是与 API 密钥一起使用的签名类型。