在为Content-Disposition属性创建/更新Google云存储对象元数据时,它是在添加新属性而不是更新现有的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);
答案 0 :(得分:3)
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/