背景
我需要使用aws命令行界面从s3下载一个目录。每当我尝试使用cli下载文件时,都会出现拒绝访问错误。不过,使用javasdk可以很好地下载。我无法查看与密钥相关联的权限,因此必须将其作为黑盒进行故障排除。我包括下面的代码示例
aws客户端
我在powershell中使用以下命令通过aws cli下载该文件
aws s3 cp s3://ec-sis-integration-test/fiscal/ .\
此命令引发以下错误
下载失败:s3://ec sis integration test/financial/to./[winerror 5]访问被拒绝:“c:\users\cmaggiul\desktop”
java软件开发包
为了解决这个问题,我创建了一个示例java应用程序,它试图从s3下载一个目录。代码包括在下面
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
TransferManager transferManager = TransferManagerBuilder.standard().withS3Client(s3Client).build();
File desktop = new File(System.getProperty("user.home"), "/Desktop");
MultipleFileDownload download = transferManager.downloadDirectory(bucket, directory, desktop);
download.waitForCompletion();
此代码使用示例成功地下载了目录 AWS_PROFILE
##故障排除步骤
我试过以下方法
试图下载空目录和非空目录
试图添加 --recursive
cli命令的标志
尝试更改目录中文件的acl(当我尝试下载非空目录时)
尝试使用我正在下载的相同aws\u配置文件和不同的aws\u配置文件创建目录
我设置了一个docker映像,下载并安装了awscli,并设置了环境变量。然后我跑了 sudo aws s3 cp s3://ec-sis-integration-test/fiscal/ ./
并收到以下错误
下载失败:s3://ec sis integration test/fiscal/to./[errno 39]目录不为空:'/root/aws test/.9aa88f60'->'/root/aws test/'
但如果我试着下载一个特定的文件,效果会很好
aws s3 cp s3://ec-sis-integration-test/fiscal/collections/COLL_20201228_1-EXP ./
如果我下载一个特定的文件,它在powershell中也可以正常工作
问题
为什么我可以使用相同的aws\u概要文件(使用javasdk而不是cli)下载文件?
1条答案
按热度按时间50pmv0ei1#
这与aws无关。您的脚本没有写入该目录的权限。