为了账号安全,请及时绑定邮箱和手机立即绑定

Google Cloud Storage 不会更新现有的默认 Content-Disposition

Google Cloud Storage 不会更新现有的默认 Content-Disposition

C#
慕少森 2022-01-09 16:56:53
Disposition 属性创建/更新谷歌云存储对象元数据时,它是添加一个新属性而不是更新现有的 Content-Disposition。请参见下图。我的目标是在下载对象时提供不同的名称。当我手动更新 Content-Disposition 时,它按预期工作。我正在使用 .NET 客户端库,下面是代码string fileNameWithExt = "filename.txt";            using (var stream = file.InputStream)            {                var obj = new Google.Apis.Storage.v1.Data.Object                {                    Bucket = bucketName,                    Name = fileName,                    ContentType = "application/octet-stream",                    Metadata = new Dictionary<string, string>                        {                            { "Content-Disposition", $"attachment; filename={fileNameWithExt}" }                        }                };                var gcsObject = storage.UploadObject(obj, stream);                var patchObject = new Google.Apis.Storage.v1.Data.Object                {                    Bucket = bucketName,                    Name = fileName,                    //ContentType = "text/plain",                    Metadata = new Dictionary<string, string>                    {                        { "Content-Disposition", $"attachment; filename={fileNameWithExt}" }                    }                };                storage.PatchObject(patchObject);
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

GCS 对象具有多种属性,包括它们的名称、它们的内容类型,以及如您所指出的内容处置。但是,它们还有另一个属性:任意用户元数据。这是字符串的键值对列表,可以包含您喜欢的任何内容。


C# 库调用自定义用户元数据键值字典Metadata。通过使用该属性,您的代码将使用“Content-Disposition”键创建自定义用户元数据条目。而是使用ContentDisposition值。像这样的东西:


var patchObject = new Google.Apis.Storage.v1.Data.Object

{

    Bucket = bucketName,

    Name = fileName,

    ContentDisposition = $"attachment; filename={fileNameWithExt}" 

}

此外,如果您正在编写新的 C# 代码,我推荐更新且更易于使用的 google-cloud .NET 库:https : //googlecloudplatform.github.io/google-cloud-dotnet/


查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信