Разрешить gzip для существующих файлов

У меня есть статические ресурсы, хранящиеся в GCS, и я хотел бы использовать их в сжатом виде (но они были загружены без сжатия). Есть ли способ настроить сжатие файлов без их загрузки и повторной загрузки в формате gzip?

Я попытался установить заголовок кодирования содержимого с помощью gsutil (т. Е. gsutil setmeta -h 'Content-Encoding:gzip' <some_object_uri>, но это просто привело к «Сервис недоступен» в файле (что, как я предполагаю, связано с попыткой сервера разархивировать файл и с ошибкой или что-то в этом роде).


person Jeff Tratner    schedule 25.10.2014    source источник


Ответы (1)


Невозможно сжать объекты без их загрузки и повторной загрузки.

Однако вы можете поручить gsutil сделать это за вас, и если вы запустите его из виртуальной машины (VM) Google Compute Engine (GCE), вы будете платить только за количество операций, а не за пропускную способность.

Кроме того, что касается установки заголовка кодирования контента с помощью setmeta, вы правы в своей интерпретации того, что произошло. Вы устанавливаете метаданные для объекта, чтобы указать, что он содержит данные gzip, но содержимое не содержит действительного потока gzip, поэтому, когда вы пытаетесь загрузить его с помощью Accept-Encoding: gzip, служба GCS пытается распаковать поток и терпит неудачу.

Я бы предложил загрузить корзину на локальный диск на виртуальной машине GCE:

gsutil cp -r gs://bucket /path/to/local/disk

Затем используйте параметр -z, чтобы указать, какие расширения файлов нужно использовать gzip:

gsutil cp -z js,css,html -r /path/to/local/disk gs://bucket
person jterrace    schedule 27.10.2014
comment
хм, я думаю, я мог бы воспользоваться API-интерфейсом уведомления об объекте, чтобы каждый раз загружать, а затем повторно загружать сжатый gzip-файл (поскольку я принимаю файлы через обработчики больших двоичных объектов App Engine). - person Jeff Tratner; 27.10.2014