0

我正在使用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);
4

1 回答 1

2

我为此向问题跟踪器添加了一个问题报告:
#192:对象元数据方法不应更改内容类型

编辑:此问题现已修复,将成为 1.2.0.0 版本的一部分。

与内容类型相关的其他几个问题已经在 1.2.0.0 版本中得到修复:

  • 该项目的问题 #104CreateObject已在版本 1.2.0.0 中得到解决,该版本增加了对在、CopyObjectCreateObjectFromFileMoveObject方法中指定内容类型的支持。
  • 问题 #125也针对 1.2.0.0 版本进行了修复,这确保了CopyObjectandMoveObject方法在未指定时保留原始内容类型。
于 2013-09-21T22:38:57.197 回答