首页 > 解决方案 > 无法使用 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()

标签: pythonamazon-s3

解决方案


似乎编码问题发生在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)

推荐阅读