Облачное хранилище Google не обновляет существующее расположение содержимого по умолчанию, но создает новые метаданные содержимого с использованием клиентских библиотек .NET - PullRequest
0 голосов
/ 10 сентября 2018

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);

1 Ответ

0 голосов
/ 10 сентября 2018

Объекты 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/

...