在Node.js上使用Google Storage API自定义头部

3
我正在使用 googleapis.auth.JWT 进行身份验证和 request 多部分上传,将 JSON 文件上传到 Google 存储中,它的工作效果如预期。

这是代码:

  var data = JSON.stringify(json);
  var metadata = {
      name: "name"
      contentLanguage: "en",
      acl: [...]
    };

  authClient.authorize(function(err, tokens) {
      if (err) {...}
      request.post({
        'url': 'https://....',
        'qs': {
          'uploadType': 'multipart'
        },  
        'headers' : { 
          'Authorization': 'Bearer ' + tokens.access_token
        },  
        'multipart':  [{  
          'Content-Type': 'application/json; charset=UTF-8',
          'body': JSON.stringify(metadata)
        },{ 
          'Content-Type': 'application/json',
          'body': data
        }]
      }, done);      
    });
  });
}

根据 Google 的说明(点击此处),如果我想要包含自定义标头,需要以 "x-goog-meta-mycustomheader" 的形式添加。
当我将上述元数据对象更改为以下内容时:
 var metadata = {
      name: "name"
      contentLanguage: "en",
      "x-goog-meta-something": "completely different",
      acl: [...]
  };

对此没有任何影响。

当我上传对象到Google Storage时,如何添加自定义标题?

编辑

请注意,这是一个多部分上传,它使用第一部分正文作为第二部分(实际部分)的元数据,请参见此处了解详情。

特别是:

如果您有要随数据一起发送的元数据,则可以进行单个多部分/相关请求。与简单媒体请求一样,如果您发送的数据足够小以便在连接失败时再次完全上传,则这是一个不错的选择。

元数据部分:必须首先出现,Content-Type必须与接受的元数据格式之一匹配。

媒体部分:必须第二次出现,Content-Type必须与该方法接受的媒体MIME类型之一匹配。

这就是为什么我将元数据用作标题部分的原因,我还尝试了所有其他组合,例如将"x-goog-meta-something"放在所有其他位置。

1个回答

2

顺便提一下,在Google存储中,“x-goog-meta-something”会生成“x-goog-meta-x-goog-meta-something”自定义标头。您应该将答案更改为metadata: {"something": "完全不同"} - ekeren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接