Google cloud storage не обновляет существующее по умолчанию content-disposition, но создает новые метаданные content-disposition с помощью клиентских библиотек .net.

enter image description hereПри создании / обновлении метаданных объекта облачного хранилища Google для свойства Content-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);
0
0
445
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Объекты GCS имеют множество свойств, включая их имя, тип содержимого и, как вы отметили, расположение содержимого. Однако у них есть еще одно свойство: произвольные пользовательские метаданные. Это список пар "ключ-значение" строк, которые могут содержать все, что угодно.

Библиотека C# вызывает словарь "ключ-значение" пользовательских метаданных Metadata. Используя это свойство, ваш код создает запись пользовательских метаданных с ключом Content-Disposition. Вместо этого используйте значение ContentDisposition. Что-то вроде этого:

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

Кроме того, если вы пишете новый код C#, я рекомендую более новую и более простую в использовании библиотеку .NET в облаке Google: https://googlecloudplatform.github.io/google-cloud-dotnet/

Спасибо @Brandon Yarbrough. Ваше решение отлично работает, и спасибо за ссылку на последние библиотеки.

umsateesh 10.09.2018 16:18

Другие вопросы по теме