Rackspace OpenStack Cloud Files APIを使用しています。アップロード自体は問題なく動作しますが、オブジェクトのメタデータの更新に問題があります。CreateObject メソッドを呼び出した後、ファイルには正しいヘッダーがありますが、同じオブジェクトで UpdateObjectMetadata を呼び出した後、コンテンツ タイプ ヘッダーが変更されます。ここで何が間違っているのかわかりません。
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 変数の前後の値です。content-type が image/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]}
編集: 一時的な回避策として、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);