我正在使用boto客户端下载并将我的文件上传到s3并执行大量其他操作,例如从一个文件夹密钥复制到另一个等等。当我尝试复制大小为0字节的密钥时出现问题。我用来复制的代码在
下面# Get the connection to the bucket
conn = boto.connect_s3(AWS_KEY, SECRET_KEY)
bucket = conn.get_bucket('mybucket')
# bucket.name is the name of my bucket
# candidate is the source key
destination_key = "destination/path/on/s3"
candidate = "the/file/to/copy"
# now copy the key
bucket.copy_key(destination_key, bucket.name, candidate) # --> This throws an exception
# just in case, see if the key ended up in the destination.
copied_key = bucket.lookup(destination_key)
我得到的例外是
3ResponseError: 404 Not Found
<Error><Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>the/file/to/copy</Key><RequestId>ABC123</RequestId><HostId>XYZ123</HostId>
</Error>
现在我通过登录aws控制台并导航到源键位置来验证密钥是否存在,密钥在那里,aws控制台显示其大小为0(在我的应用程序中有些情况我可以最终得到空文件,但我需要他们在s3)。
所以上传工作正常,boto上传密钥没有任何问题,但当我尝试复制它时,我得到密钥不存在的错误
那么我应该使用其他逻辑来复制这些密钥吗?在这方面的任何帮助将不胜感激
答案 0 :(得分:0)
确保包含源密钥的存储桶。应该是bucket/path/to/file/to/copy
答案 1 :(得分:0)
试试这个:
from boto.s3.key import Key
download_path = '/tmp/dest_test.jpg'
bucket_key = Key(bucket)
bucket_key.key = file_key # e.g. images/source_test.jpg
bucket_key.get_contents_to_filename(download_path)