Как добавить метаданные в файл при загрузке через GCS SignUploadURL? - PullRequest
0 голосов
/ 02 октября 2019

Я использую подписанный URL (сгенерированный с помощью GCS PHP API) для загрузки файла в корзину. Я отправляю подписанный URL, который возвращает заголовок Location, который, в свою очередь, я делаю PUT для фактической загрузки. Этот основной процесс загрузки работает нормально. Теперь мне нужно передать некоторые метаданные (имя пользователя, адрес электронной почты, примечания и т. Д.) Вместе с файлом.

Согласно документации, я добавляю заголовки к запросу PUT в форме 'x-goog-meta-<name>': '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
      });
  }
}
...