我想下载存储桶中的所有文件和文件夹。这是我的代码
!SESSION 2017-06-28 09:34:24.129 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.8.0_131
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
!ENTRY org.eclipse.osgi 4 0 2017-06-28 09:34:24.129
!MESSAGE Error reading configuration: Permission denied
!STACK 0
java.io.IOException: Permission denied
错误 -
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')
请帮助我克服这个问题!
答案 0 :(得分:1)
我遇到了这个问题。问题是S3存储桶没有目录。文件结构是扁平的,但每个键都被命名为路径名。
所以,如果你有
bucket
|
|__dir1
|
|_file1
|_file2
你实际上有钥匙
bucket/dir1/
bucket/dir1/file1
bucket/dir1/file2
对于我(在Windows操作系统中),get_contents_to_filename
适用于文件密钥(bucket/dir1/file1
),但目录密钥(bucket/dir1
)失败,触发os.remove(filename)
和最终是PermissionError。
相反,您可以尝试递归遍历目录结构, get_contents_to_filename 用于文件密钥, mkdir 用于目录密钥(以斜杠'/'结尾)。< / p>
答案 1 :(得分:1)
我遇到了与boto3相同的问题。这就是我的尝试 -
s3.Object('<bucket>','<prefix>/<filename>').download_file('C:\myfolder')
我尝试了多种操作,例如以管理员身份运行,提供不同的本地路径,提供公共用户路径等,但没有任何效果。问题是我提供的是文件夹路径,而不是文件路径。所以这最终有效 -
s3.Object('<bucket>','<prefix>/<filename>').download_file('C:\myfolder\<filename>')