2016-01-28 7 views
2

Если у меня есть файл на 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', 
+1

вызов API выглядит право ... копирование объекта на самом деле это то, как вы изменяете метаданные ... но у вас нет заголовков 'Cache-Control', поэтому вы можете видеть кешированный ответ. Или вы можете видеть проблему согласованности в S3 - вновь созданные объекты гарантируются сразу же; перезаписывать и удалять не гарантируется, хотя они обычно почти сразу (хотя и не всегда). Проверить метаданные объекта в консоли S3? –

+0

А, интересно. Таким образом, я вошел в консоль S3, чтобы проверить метаданные, и он не изменился, все еще 'video/mp4' – dylanjha

+1

Собственно, моя ошибка: вызов API * не совсем корректен. Отсутствует директива x-amz-metadata: REPLACE'. Если это не указано, по умолчанию используется 'COPY'. Обратите внимание, что при замене «REPLACE», * all * метаданных будет только то, что вы предоставляете, поэтому, если есть другие метаданные, которые вы хотите сохранить, вы должны их получить и включить в запрос put/copy. http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html –

ответ

0

я пропускал этот заголовок:

var filename = "/example/file.mp4", 
    headers = { 
    "x-amz-metadata-directive": "REPLACE", 
    'Content-Type': "application/octet-stream" 
    }; 

client.copyFile(filename, filename, headers, function(error, resp) { 
    //response is successful 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^