WindowsError: [Error 5] Access is denied using boto/python

WindowsError: [Error 5] Access is denied using boto/python

我要下载存储桶中的所有文件和文件夹。这是我的代码

conn = boto.connect_s3(AWS_ACCESS_KEY_ID,
                           AWS_ACCESS_KEY_SECRET)
bucket = conn.get_bucket(bucket_name)
key = boto.s3.key.Key(bucket)
key.get_contents_to_filename('path/to/folder')

错误-

File "C:\Python27\lib\site-packages\boto\s3\key.py", line 1726, in get_contents_to_filename
    os.remove(filename)
WindowsError: [Error 5] Access is denied: 'path/to/folder'

请帮我解决问题![​​=12=]

我遇到了这个问题。问题是 S3 Buckets 没有目录。文件结构是扁平的,但每个键都被命名为路径名。

所以如果你有

bucket
|
|__dir1
   |
   |_file1
   |_file2

您实际上将拥有钥匙

bucket/dir1/
bucket/dir1/file1
bucket/dir1/file2

对我来说(在 Windows OS 中),get_contents_to_filename 适用于文件键 (bucket/dir1/file1) 但不适用于目录键 (bucket/dir1 ),这会触发 os.remove(filename) 并最终触发 PermissionError。

相反,您可以尝试递归遍历目录结构,get_contents_to_filename 用于文件键,mkdir 用于目录键(这些以斜杠“/”结尾)。

我在使用 boto3 时遇到了同样的问题。这就是我正在尝试的-

s3.Object('<bucket>','<prefix>/<filename>').download_file('C:\myfolder')

我尝试了多种操作,例如 运行 作为管理员,提供不同的本地路径,提供 public 用户路径等,但没有任何效果。问题是我提供的是 folder 路径,而不是 file 路径。所以这最终奏效了-

s3.Object('<bucket>','<prefix>/<filename>').download_file('C:\myfolder\<filename>')