调用CopyObject操作时为NoSuchBucket

时间:2019-04-04 19:22:22

标签: python

仅当此文件不存在时,我才尝试从s3中的旧文件恢复文件。 我当前的代码是这样的:

import botocore
import os

s3 = boto3.resource('s3')

def checkFile(filename, buckett="selfmarkett"):
    try:
        s3.Object(buckett, filename).load()
    except botocore.exceptions.ClientError as e:
        if e.response['Error']['Code'] == "404":
            try:
                _filename, _extension = os.path.splitext(filename)
                oldFilename = _filename + ".p_up" + _extension
                s3.Object(buckett, filename).copy_from(CopySource=oldFilename)
            except Exception as error:
                print("Error2:", error)

我的问题是,当脚本尝试使用功能copy_from时,返回此错误:

NoSuchBucket: An error occurred (NoSuchBucket) when calling the CopyObject operation: The specified bucket does not exist

存储桶已在对象中指定,我该如何解决此错误?

3 个答案:

答案 0 :(得分:0)

我不熟悉您使用的编码语言,但是是否可以为copy_from提供第二个参数?我怀疑您需要在对copy_from

的调用中指定存储区和文件名/密钥

答案 1 :(得分:0)

我遇到了同样的问题,并通过在CopySource的路径内添加存储桶名称来解决此问题,如下所示:

n

答案 2 :(得分:0)

nodeJS api 有同样的问题,它可能与此处相同:https://stackoverflow.com/a/66492490/2083748(您需要对复制源进行 URL 编码)