Как установить Content-Encoding для загрузки на AWS S3 с помощью пакета AWSSDK.S3 в NET? - PullRequest
1 голос
/ 18 июня 2020

Задача: загрузить уже сжатый файл в корзину Amazon AWS S3 с помощью пакета AWSSDK.S3 в. NET Core и установить для заголовка Content-Encoding значение «gzip».

У меня есть корзина S3, в которую я пытаюсь загрузить. Я использую поток ввода-вывода для данных, но нет возможности установить Content-Encoding элемента в процессе загрузки. Это заголовок, который я хочу установить, когда элемент будет обслуживаться службой S3 (это не Content-Encoding для самой загрузки).

Я использую объекты TransferUtility и TransferUtilityUploadRequest. В то время как вы можете просто установить Content-Type (см. Ниже), нет свойства для установки Content-Encoding. Если вы используете функцию Metadata.Add, она автоматически перепишет Content-Encoding на специальный ключ «x-amz-meta-content-encoding», что, конечно, бесполезно.

Насколько я понимаю, вы можете Я не устанавливаю метаданные в S3 постфактум, кроме как путем копирования объекта или выполнения этого самостоятельно вручную (для меня это не- go, слишком много файлов). При копировании объекта я не уверен, что все равно смогу установить метаданные.

            var s3Client = new AmazonS3Client(awsCreden‌​tials, bucketRegion);
            var fileTransferUtility = new TransferUtility(s3Client);

            byte[] compressedDataArray = <some compressed data>;
            using (MemoryStream memoryStream = new MemoryStream(compressedDataArray)) {
                var fileTransferUtilityRequest = new TransferUtilityUploadRequest {
                    BucketName = bucketName,
                    ContentType = "application/json",
                    StorageClass = S3StorageClass.Standard,
                    Key = fileKey + ".gz",
                    CannedACL = S3CannedACL.PublicRead,
                    InputStream = memoryStream,
                    AutoCloseStream = true
                };
                fileTransferUtilityRequest.Metadata.Add("Content-Encoding", "gzip");
                fileTransferUtility.Upload(fileTransferUtilityRequest);
            }

Он будет загружен в новый файл в S3, но не будет иметь установленный заголовок Content-Encoding .

Помогите пожалуйста, кто угодно! спасибо!

1 Ответ

1 голос
/ 18 июня 2020

хорошо, похоже, что работает, это установить ContentEncoding в коллекции заголовков для запроса:

fileTransferUtilityRequest.Headers.ContentEncoding = "gzip";
...