我正在使用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);
}
这些是元数据变量的前后值。看看内容类型如何从 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);