C# Google云存储不更新现有的默认内容处置,而是使用.NET客户端库创建新的内容处置元数据

C# Google云存储不更新现有的默认内容处置,而是使用.NET客户端库创建新的内容处置元数据,c#,.net,google-cloud-storage,metadata,C#,.net,Google Cloud Storage,Metadata,为内容处置属性创建/更新google云存储对象元数据时,它正在添加新属性,而不是更新现有的内容处置。请参见下图 我的目标是在下载对象时提供不同的名称。当我手动更新内容配置时,它会按预期工作 我正在使用.NET客户端库,下面是代码 string fileNameWithExt = "filename.txt"; using (var stream = file.InputStream) { var obj = new

为内容处置属性创建/更新google云存储对象元数据时,它正在添加新属性,而不是更新现有的内容处置。请参见下图

我的目标是在下载对象时提供不同的名称。当我手动更新内容配置时,它会按预期工作

我正在使用.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);
stringfilenamewithext=“filename.txt”;
使用(var stream=file.InputStream)
{
var obj=new Google.api.Storage.v1.Data.Object
{
Bucket=bucketName,
Name=文件名,
ContentType=“应用程序/八位字节流”,
元数据=新字典
{
{“内容处置”,$“附件;文件名={fileNameWithExt}}”
}
};
var gcsObject=storage.UploadObject(对象,流);
var patchObject=new Google.api.Storage.v1.Data.Object
{
Bucket=bucketName,
Name=文件名,
//ContentType=“text/plain”,
元数据=新字典
{
{“内容处置”,$“附件;文件名={fileNameWithExt}}”
}
};
存储。PatchObject(PatchObject);

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

C#库调用自定义用户元数据键值字典
metadata
。通过使用该属性,您的代码正在创建一个自定义用户元数据条目,其键值为“Content Disposition”。相反,请使用该值。类似如下:

var patchObject = new Google.Apis.Storage.v1.Data.Object
{
    Bucket = bucketName,
    Name = fileName,
    ContentDisposition = $"attachment; filename={fileNameWithExt}" 
}

此外,如果您正在编写新的C#代码,我建议您使用更新且更易于使用的google cloud.NET库:

GCS对象具有多种属性,包括名称、内容类型,以及您提到的内容配置。但是,它们还有另一个属性:任意用户元数据。这是一个st.NET的键值对列表可以容纳任何你喜欢的东西的戒指

C#库调用自定义用户元数据键值字典
metadata
。通过使用该属性,您的代码正在创建一个自定义用户元数据条目,其键值为“Content Disposition”。相反,请使用该值。类似如下:

var patchObject = new Google.Apis.Storage.v1.Data.Object
{
    Bucket = bucketName,
    Name = fileName,
    ContentDisposition = $"attachment; filename={fileNameWithExt}" 
}

此外,如果您正在编写新的C#代码,我建议您使用更新且更易于使用的google cloud.NET库:

谢谢@Brandon Yarbrough。您的解决方案运行良好,感谢您链接到最新库。谢谢@Brandon Yarbrough。您的解决方案运行良好,感谢您链接到最新库。