从s3下载目录可以使用JavaSDK,但不能使用AWSCLI

dohp0rv5  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(376)

背景

我需要使用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)下载文件?

50pmv0ei

50pmv0ei1#

[WinError 5] Access is denied: 'C:\users\cmaggiul\Desktop\

这与aws无关。您的脚本没有写入该目录的权限。

相关问题