Как транслировать документ Word в байтах, хранящихся в AWS S3, из boto3 - PullRequest
0 голосов
/ 06 июля 2019

Используя boto3, я пытаюсь получить документ Microsoft Word, хранящийся на S3. Однако, когда я пытаюсь получить доступ к объекту, вызывающему client.get_object(), длина содержимого Word Document равна 0, тогда как файлы с расширениями .txt возвращают правильную длину содержимого. Есть ли способ декодировать документ Word для записи его вывода в поток?

Я проверил это с файлами .txt и .docs, а также попытался использовать метод .decode () после прочтения файла, но, судя по возвращаемому содержимому, ничего не расшифровывать .

Доступ к документу .txt. Я заметил, что длина содержимого равна 17 (количество символов в файле), и их можно прочитать, вызвав txt_file.read ()

s3 = boto3.client('s3')
txt_file = s3.get_object(Bucket="test_bucket", Key="test.txt").get()
>>> txt_file
{
    u'Body': <botocore.response.StreamingBody object at 0x7fc5f0074f10>, 
    u'AcceptRanges': 'bytes', 
    u'ContentType': 'text/plain', 
    'ResponseMetadata': {
        'HTTPStatusCode': 200, 
    'RetryAttempts': 0, 
        'HTTPHeaders': {
        'content-length': '17', 
        'accept-ranges': 'bytes', 
        'server': 'AmazonS3', 
        'last-modified': 'Sat, 06 Jul 2019 02:13:45 GMT', 
        'date': 'Sat, 06 Jul 2019 15:58:21 GMT', 
        'x-amz-server-side-encryption': 'AES256', 
        'content-type': 'text/plain'
        }
    }
} 

Доступ к документу .docx. Я заметил, что длина содержимого равна 0 (в то время как документ имеет ту же строку, записанную в файл .txt), и вызов txt_file.read () выдает пустую строку u ''

s3 = boto3.client('s3')
word_file = s3.get_object(Bucket="test_bucket", Key="test.docx").get()
>>> word_file
{
    u'Body': <botocore.response.StreamingBody object at 0x7fc5f0074f10>, 
    u'AcceptRanges': 'bytes', 
    u'ContentType': 'binary/octet-stream', 
    'ResponseMetadata': {
        'HTTPStatusCode': 200, 
    'RetryAttempts': 0, 
        'HTTPHeaders': {
        'content-length': '0', 
        'accept-ranges': 'bytes', 
        'server': 'AmazonS3', 
        'last-modified': 'Thu, 04 Jul 2019 21:51:53 GMT', 
        'date': 'Sat, 06 Jul 2019 15:58:30 GMT', 
        'x-amz-server-side-encryption': 'AES256', 
        'content-type': 'binary/octet-stream'
        }
    }
} 

Я ожидаю, что длина содержимого обоих файлов выведет количество байтов в файле, однако, только файл .txt возвращает данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...