我目前正在尝试编写一些代码,以将Google存储桶中的某些“区域”对象转换为“冷线”,但是我遇到了以下异常:
{服务存储已引发异常:Google.GoogleApiException:Google.Apis.Requests.RequestError 无效的参数[400] 错误[ 消息[无效参数]位置[-]原因[无效]域[全局] ]
在Google.Apis.Requests.ClientServiceRequest
1.ParseResponse(HttpResponseMessage response) in C:\Apiary\support1351\Src\Support\Google.Apis\Requests\ClientServiceRequest.cs:line 192 at Google.Apis.Requests.ClientServiceRequest
1.Execute()在C:\ Apiary \ support1351 \ Src \ Support \ Google.Apis \ Requests \ ClientServiceRequest.cs:line 116 在C:\ work \ teams-api \ Example \ Example.Example.Core.Google \ GoogleStorageHandler.cs:line 365}中的Example.Core.Google.GoogleStorageHandler.Archive()中
我的代码如下:
StorageClient _storageClient;
string storageBucket = "testBucket";
string storageKey = "testFile";
// Test object setup code (added for this question to make the sample more complete)
using (var stream = new MemoryStream(new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4 }))
{
_storageClient.UploadObject(storageBucket, storageKey, null, stream);
}
// End of setup code
var objectData = _storageClient.GetObject(storageBucket, storageKey);
if (!string.Equals(objectData.StorageClass, "coldline", StringComparison.InvariantCultureIgnoreCase))
{
objectData.StorageClass = "coldline";
_storageClient.UpdateObject(objectData); // exception thrown here
}
我已经确认可以对同一对象的元数据进行其他更改(例如,将objectData.StorageClass
替换为objectData.ContentType
),但是不能更改存储类。我发现听起来很相关的唯一问题是this one,导致了同样的错误。不幸的是,我使用的是Jon建议的SDK的固定版本(2.2.1),因此似乎不是同一问题。我也尝试使用最新的预发行版本(2.3.0-beta04),但没有任何改善。
我可以通过gsutil
更改对象的StorageClass类,如果我在get object help page上轮询对象,就会反映出来。如果我尝试使用相同的storageClass
来patch it,则可以使用。如果我尝试更改storageClass
,它将失败并显示以下400错误:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "Invalid argument"
}
],
"code": 400,
"message": "Invalid argument"
}
}
鉴于gsutil
可以更改它,我倾向于相信我应该能够通过SDK或API,但我不能。 This page指出storageClass
字段是可写的。我是否还缺少其他需要包含的数据?似乎没有对UpdateObject有用的重载,这会影响我的情况。
答案 0 :(得分:4)
基于this documentation,我认为您不能直接使用补丁或更新来更新存储类。相反,您需要对该对象执行重写操作。
我们目前不直接在Google.Cloud.Storage.V1
中公开重写,但是您应该能够使用基础服务:
var obj = new Google.Apis.Storage.v1.Data.Object { StorageClass = "coldline" };
client.Service.Objects.Rewrite(obj, bucketName, objectName, bucketName, objectName).Execute();