Я использую подписанный 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
});
}
}