python - 无法使用 python 将仅包含图像的 pdf 上传到 S3 存储桶
问题描述
我有已转换为 pdf 并存储在名为“test”的文件夹中的图像。
我需要将测试文件夹中的所有文件上传到 S3
当前情况:文件在 S3 中创建但为空。我假设是因为源 pdf 文件只包含一个图像。我无法找到一种方法来确保 pdf 的图像也被上传
这是我的代码:
import os
import boto3
import botocore
import sys
SERVICE_NAME = 's3'
AWS_ACCESS_KEY_ID = 'XXXX'
AWS_SECRET_ACCESS_KEY = 'XXXXX+A'
AWS_S3_ENDPOINT_URL = 'https://s3.amazonaws.com'
AWS_STORAGE_BUCKET_NAME = 'resolution-medical/resolution_scanner'
AWS_STORAGE_BUCKET_NAME = 'resolution-medical'
source_folder = '/home/irfan/Downloads/test'
arr = os.listdir(source_folder)
for each in arr:
try:
arr2 = os.listdir(source_folder + '/' + each)
except:
arr2 = []
if len(arr2) == 0:
filepath = 'resolution_scanner/' + each
fileobject = source_folder+ '/' + each
conn = boto3.resource(
service_name=SERVICE_NAME,
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
endpoint_url=AWS_S3_ENDPOINT_URL)
conn.Object(AWS_STORAGE_BUCKET_NAME, filepath).put(Body=fileobject, ACL='public-read', ContentType='application/pdf')
sys.exit()
解决方案
似乎编码问题发生在put()
. 这个SO Q&A 用 java 解决。对我来说,只需使用upload_file()
这样的作品:
import boto3
file = "PDF/aaaaa.pdf"
s3 = boto3.resource("s3")
s3.Object("my-bucket-test", "test.pdf").upload_file(file)