Если у меня есть файл на s3, как я могу изменить метаданные этого файла?Изменить заголовок на файл s3
Похоже, я могу «скопировать» его в одно и то же место с новыми заголовками, что было бы фактически одним и тем же.
Я использую knox как клиент узла для этого. В файле, о котором идет речь, уже есть заголовок Content-Type
, установленный на video/mp4
, но я хочу изменить его на application/octet-stream
. Причина этого в том, что эта ссылка заставит браузер загружать ресурс, а не отображать его в окне браузера.
Ссылка на knox source для этой функции
var filename = "/example/file.mp4",
headers = {'Content-Type': "application/octet-stream"};
client.copyFile(filename, filename, headers, function(error, resp) {
//response is successful
});
Отклик успешно, но когда я перезагрузить ресурс в s3 я не вижу, что заголовки изменились.
я могу видеть, что основной вызов API заключается в следующем:
'PUT /example/file.mp4 HTTP/1.1\r\nContent-Type: application/octet-stream
x-amz-copy-source: /bucket/example/file.mp4
Content-Length: 0\r\nDate: Thu, 28 Jan 2016 21:13:12 GMT
Host: cc-video-archives-dev.s3.amazonaws.com
Authorization: <redacted>=\r\nConnection: close\r\n\r\n',
вызов API выглядит право ... копирование объекта на самом деле это то, как вы изменяете метаданные ... но у вас нет заголовков 'Cache-Control', поэтому вы можете видеть кешированный ответ. Или вы можете видеть проблему согласованности в S3 - вновь созданные объекты гарантируются сразу же; перезаписывать и удалять не гарантируется, хотя они обычно почти сразу (хотя и не всегда). Проверить метаданные объекта в консоли S3? –
А, интересно. Таким образом, я вошел в консоль S3, чтобы проверить метаданные, и он не изменился, все еще 'video/mp4' – dylanjha
Собственно, моя ошибка: вызов API * не совсем корректен. Отсутствует директива x-amz-metadata: REPLACE'. Если это не указано, по умолчанию используется 'COPY'. Обратите внимание, что при замене «REPLACE», * all * метаданных будет только то, что вы предоставляете, поэтому, если есть другие метаданные, которые вы хотите сохранить, вы должны их получить и включить в запрос put/copy. http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html –