Я использую Rackspace OpenStack Cloud Files API. Загрузка сама по себе работает без каких-либо проблем, но есть проблема с обновлением MetaData для объекта. После вызова метода CreateObject файл имеет правильные заголовки, но он меняет заголовок типа содержимого после вызова UpdateObjectMetadata на том же объекте. Не уверен, что я делаю неправильно здесь.CloudFilesProvider UpdateObjectMetadata Issue
void Test(string containerName, Stream objectStream, string name, string region)
{
_cloudFilesProvider.CreateObject(containerName, objectStream, name, region: region);
// debug only
var metaData = _cloudFilesProvider.GetObjectMetaData(containerName, name, region);
_cloudFilesProvider.UpdateObjectMetadata(containerName, name, new Dictionary<string, string>
{{"Mimetype", "image/png"},
{"Size", "500"},
{"FileName", "TestImage.png"},
{"Dimensions", "128x128"} }, region);
// debug only
metaData = _cloudFilesProvider.GetObjectMetaData(containerName, name, region);
}
Это переменная metaData до и после значений. Посмотрите, как изменяется тип содержимого с изображения/png на application/json?
Перед
[0]: {[x-timestamp, 1379752874.71586]}
[1]: {[x-trans-id, txf1bbd8a40b604f9a81140-00523d5bb4syd2]}
[2]: {[accept-ranges, bytes]}
[3]: {[content-length, 159340]}
[4]: {[content-type, image/png]}
[5]: {[date, Sat, 21 Sep 2013 08:41:24 GMT]}
[6]: {[etag, 375cd8b405058f2766482345d4adbd0e]}
[7]: {[last-modified, Sat, 21 Sep 2013 08:41:14 GMT]}
После
[0]: {[x-timestamp, 1379752926.55112]}
[1]: {[x-trans-id, tx269335ba878f44db890a1-00523d5be2syd2]}
[2]: {[accept-ranges, bytes]}
[3]: {[content-length, 159340]}
[4]: {[content-type, application/json]}
[5]: {[date, Sat, 21 Sep 2013 08:42:10 GMT]}
[6]: {[etag, 375cd8b405058f2766482345d4adbd0e]}
[7]: {[last-modified, Sat, 21 Sep 2013 08:42:06 GMT]}
Edit: В качестве временного решения я использую метод CreateObject, чтобы изменить заголовки с метаданными. На самом деле это лучше, так как это избавляет от ненужного POST. Фактически, метод CreateObject должен, вероятно, поддерживать необязательный параметр для установки MetaData. Мысли?
cloudFilesProvider.CreateObject(containerName, objectStream, name, headers: new Dictionary<string, string>
{{"X-Object-Meta-Mimetype", "image/png"},
{"X-Object-Meta-Size", "500"},
{"X-Object-Meta-FileName", "TestImage.png"},
{"X-Object-Meta-Dimensions", "128x128"} }, region: region);
Спасибо, я добавил обходной путь к этому вопросу выше. –