gpt4 book ai didi

c# - 如何更改 GCS 存储桶中单个对象的存储类?

转载 作者:行者123 更新时间:2023-12-05 03:03:05 27 4
gpt4 key购买 nike

我目前正在尝试编写一些代码以将 Google 存储桶中的一些“区域”对象转换为“冷线”,但出现以下异常:

{The service storage has thrown an exception: Google.GoogleApiException: Google.Apis.Requests.RequestError Invalid argument [400] Errors [ Message[Invalid argument] Location[ - ] Reason[invalid] Domain[global] ]

at Google.Apis.Requests.ClientServiceRequest1.ParseResponse(HttpResponseMessage response) in C:\Apiary\support1351\Src\Support\Google.Apis\Requests\ClientServiceRequest.cs:line 192
at Google.Apis.Requests.ClientServiceRequest
1.Execute() in C:\Apiary\support1351\Src\Support\Google.Apis\Requests\ClientServiceRequest.cs:line 116 at Example.Core.Google.GoogleStorageHandler.Archive() in C:\work\teams-api\Example\Example.Core.Google\GoogleStorageHandler.cs:line 365}

我的代码如下:

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 上的对象,这会反射(reflect)出来。 .如果我尝试 patch it使用相同的 storageClass,它可以工作。如果我尝试更改 storageClass,它会失败并显示以下 400 错误:

{
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "Invalid argument"
}
],
"code": 400,
"message": "Invalid argument"
}
}

鉴于 gsutil 可以更改它,我倾向于相信我应该能够通过 SDK 或 API 进行更改,但我不能。 This page说明 storageClass 字段是可写的。我是否遗漏了一些我需要包含的其他数据? UpdateObject 似乎没有任何有用的重载会影响我的情况。

最佳答案

基于 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();

关于c# - 如何更改 GCS 存储桶中单个对象的存储类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54230553/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com