【问题标题】:WindowsError: [Error 5] Access is denied using boto/pythonWindowsError:[错误 5] 使用 boto/python 拒绝访问
【发布时间】:2017-06-28 07:48:36
【问题描述】:

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

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'

请帮我解决这个问题!

【问题讨论】:

  • 尝试以管理员权限运行 cmd
  • 还是不行!
  • 只是为了澄清 Stack 的评论,转到开始,键入 cmd,shift-右键单击 cmd.exe 并选择“以管理员身份运行”,导航到您的 python 脚本文件夹并运行 python yourscript.py 或可能是C:\Python27\python yourscript.py。进一步补充;确保path/to/folder 不仅仅是一个路径,而是包含您要访问的文件名,os.remove 只能直接处理文件,这就是原因。
  • 好吧,这是有道理的........但我想下载我的存储桶中包含多个目录的 zip 文件

标签: python boto


【解决方案1】:

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

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

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

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

【讨论】:

  • 这实际上是我长达 3 天的搜索解决对文件夹的只读访问的解决方案..
【解决方案2】:

我遇到了这个确切的问题。问题是 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 获取目录键(这些以斜杠“/”结尾)。

【讨论】:

    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 2017-05-02
    • 2011-07-31
    相关资源
    最近更新 更多