Python - 在 cloud9 AWS (boto3) 上查找文件路径

Python - Finding path of a file on cloud9 AWS (boto3)

我正在尝试将来自 cloud9 环境的对象放入 S3 存储桶中 该文件位于 IDE 内的同一文件夹中。 我有一个名为 project1 的文件夹,这个脚本和文件在同一个文件夹中 这是我的代码

 import logging
    import boto3
    from botocore.exceptions import ClientError


def put_object(dest_bucket_name, dest_object_name, src_data):
    """
    Add an object to an Amazon S3 bucket

    The src_data argument must be of type bytes or a string that references
    a file specification.

    :param dest_bucket_name: string
    :param dest_object_name: string
    :param src_data: bytes of data or string reference to file spec
    :return: True if src_data was added to dest_bucket/dest_object, otherwise
    False
    """

    # Construct Body= parameter
    if isinstance(src_data, bytes):
        object_data = src_data
    elif isinstance(src_data, str):
        try:
            object_data = open(src_data, 'rb')
            # possible FileNotFoundError/IOError exception
        except Exception as e:
            logging.error(e)
            return False
    else:
        logging.error('Type of ' + str(type(src_data)) +
                      ' for the argument \'src_data\' is not supported.')
        return False

    # Put the object
    s3 = boto3.client('s3')
    try:
        s3.put_object(Bucket=dest_bucket_name, Key=dest_object_name, Body=object_data)
    except ClientError as e:
        # AllAccessDisabled error == bucket not found
        # NoSuchKey or InvalidRequest error == (dest bucket/obj == src bucket/obj)
        logging.error(e)
        return False
    finally:
        if isinstance(src_data, str):
            object_data.close()
    return True


def main():
    """Exercise put_object()"""

    test_bucket_name = 'BUCKET_NAME'
    test_object_name = 'OBJECT_NAME'
    filename = 'file.ext'
    # Alternatively, specify object contents using bytes.
    # filename = b'This is the data to store in the S3 object.'

    # Set up logging
    logging.basicConfig(level=logging.DEBUG,
                        format='%(levelname)s: %(asctime)s: %(message)s')

    # Put the object into the bucket
    success = put_object(test_bucket_name, test_object_name, filename)
    if success:
        logging.info(f'Added {test_object_name} to {test_bucket_name}')


if __name__ == '__main__':
    main()

是否可以将文件从 IDE 放入 S3 存储桶?

Is it possible to put the file from the IDE to the S3 bucket?

是的。如果你知道它的相对路径,你可以使用常规 boto3 的方法将文件上传到 s3,假设你有访问 s3 的权限。

如果您不确定脚本中当前的工作目录是什么,您可以使用

import os

print(os.getcwd())

显然您可以使用 os.getcwd() 来构建脚本的完整路径,例如:

os.getcwd()/file/to/upload/to/s3.txt