В S3 Bucket, как правильно настроить файлы в формате JSON для загрузки или чтения? - PullRequest
1 голос
/ 15 марта 2019

Мой вопрос возник, когда я испытал два разных поведения в URL объекта из файлов json, хранящихся в корзине s3.

Рассмотрим файл json: mydata.json

Если я загружаю этот файл с помощью панели инструментов s3 с веб-сайта AWS, я могу просматривать данные в браузере: // s3-us-west-2.amazonaws.com/bucket/folder/mydata.json. Я также могу читать эти данные из другого приложения, если я создаю определенную конфигурацию в корзине s3.

С другой стороны, если я использую библиотеку boto3 для python и загружаю тот же файл в том же контейнере (делая файл общедоступным в процессе), когда я нажимаю URL объекта , он загружает файл , но он не открывает данные в браузере.

Это код, который я использовал:

# upload json file
bucket.upload_file(path, jsonkey)
object_acl = s3.ObjectAcl('bucket_name', jsonkey)
bucket_response = object_acl.put(ACL='public-read')

Я исследовал свойства файла, такие как метаданные. Когда я загружаю файл через панель мониторинга, назначаемые метаданные Content-Type: application/json, а через boto3 - Content-Type: binary/octet-stream. Я действительно не знаю, влияют ли метаданные на поведение объекта URL .

В этом контексте как правильно настроить файлы в формате json для загрузки или чтения? Я имею в виду, какая основная конфигурация влияет на поведение URL объекта ?

Я не смог найти существенную разницу между обоими методами (панель инструментов и boto3) в свойствах или разрешениях, кроме Content-Type в метаданных. Однако, когда я пытался изменить Content-Type, поведение было таким же.

Любая другая информация, которую я могу предоставить, чтобы уточнить этот вопрос, не стесняйтесь спрашивать. Заранее спасибо.

1 Ответ

1 голос
/ 15 марта 2019

Документация по методу upload_file () для ресурса корзины S3 не идеальна, поскольку просто указывает вам эквивалентные документы S3Transfer о том, как можно использовать дополнительные аргументы.

Попробуйте следующее:

bucket.upload_file(path, jsonkey, ExtraArgs={'ContentType': "application/json"})
...