Google cloud storage 通过GCS signedUploadURL上载时,如何向文件添加元数据?

Google cloud storage 通过GCS signedUploadURL上载时,如何向文件添加元数据?,google-cloud-storage,Google Cloud Storage,我正在使用一个签名URL(通过GCS PHP API生成)将文件上传到bucket。我发布签名的URL,它返回一个位置头,反过来,我做一个PUT来完成实际的上传。这个基本的上传过程运行良好。现在,我需要在文件中传递一些元数据(上传者名称、上传者电子邮件、注释等) 根据文档,我向PUT请求添加了头,其形式为'x-goog-meta-:'value',它们应该成为元数据。但是,如果我不将它们添加到已签名的URL和POST请求中,我会得到一个虚假的CORS错误(请求的资源上不存在“Access Con

我正在使用一个签名URL(通过GCS PHP API生成)将文件上传到bucket。我发布签名的URL,它返回一个位置头,反过来,我做一个PUT来完成实际的上传。这个基本的上传过程运行良好。现在,我需要在文件中传递一些元数据(上传者名称、上传者电子邮件、注释等)

根据文档,我向PUT请求添加了头,其形式为
'x-goog-meta-:'value'
,它们应该成为元数据。但是,如果我不将它们添加到已签名的URL和POST请求中,我会得到一个虚假的CORS错误(请求的资源上不存在“Access Control Allow Origin”头)

上传成功了,我可以在Chrome的网络选项卡中看到,这些头被添加到POST和PUT请求中,但是当文件到达存储桶时,没有元数据

这是我的代码,有点简化:

var metadata, headers;

metadata =
{
  'sender-name':    "bob dobbs",
  'sender-email':   "bobdobbs@zynyz.com",
};

headers = { 'x-goog-resumable': 'start' };

for (var i in metadata)
{
  headers['x-goog-meta-' + i] = metadata[i];
}

// Start the upload
$.ajax(
{
  type:           POST,
  url:            signed_upload_url,
  success:        on_init_success,
  contentType:    file.type,
  headers:        headers,
  processData:    false
});

// Do the actual upload
var on_init_success = function(result, status, xhr)
{
  var loc;

  loc = xhr.getResponseHeader('Location');
  if (loc)
  {
      $.ajax(
      {
          type:           'PUT',
          url:            loc,
          data:           file,
          contentType:    file.type,
          headers:        headers,
          processData:    false
      });
  }
}

您好,您可以使用这个命令“gsutil stat gs://[BUCKET\u NAME]/[object\u NAME]”[1][1]-@andie:这与控制台中的相同,不显示任何元数据。您好,您的代码看起来很好,我认为,如果您向GCP支持部门提交一个案例,以检查您的bucket没有收到元数据的原因,您所面临的问题可能会得到更好的处理@安迪:很遗憾,我们没有支持计划,所以我认为这是我唯一的选择。不过,谢谢你检查代码。至少现在我觉得我没有做什么太愚蠢的事。