Используя 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 возвращает данные.