从S3下载目录适用于Java SDK,但不适用于AWS CLI 出身背景
我需要使用AWS命令行界面从s3下载一个目录。每当我尝试使用CLI下载文件时,都会出现访问被拒绝错误。但是,它可以使用JavaSDK进行良好的下载。我无法查看与密钥关联的权限,因此我必须将其作为黑盒进行故障排除。我将代码示例包括在下面 AWS CLI 我正在PowerShell中使用以下命令通过AWS CLI下载该文件从S3下载目录适用于Java SDK,但不适用于AWS CLI 出身背景,java,amazon-web-services,amazon-s3,aws-cli,Java,Amazon Web Services,Amazon S3,Aws Cli,我需要使用AWS命令行界面从s3下载一个目录。每当我尝试使用CLI下载文件时,都会出现访问被拒绝错误。但是,它可以使用JavaSDK进行良好的下载。我无法查看与密钥关联的权限,因此我必须将其作为黑盒进行故障排除。我将代码示例包括在下面 AWS CLI 我正在PowerShell中使用以下命令通过AWS CLI下载该文件 aws s3 cp s3://ec-sis-integration-test/fiscal/ .\ 此命令引发以下错误 下载失败:s3://ec sis集成测试/fiscal/
aws s3 cp s3://ec-sis-integration-test/fiscal/ .\
此命令引发以下错误
下载失败:s3://ec sis集成测试/fiscal/to./[WinError 5]访问被拒绝:“C:\users\cmaggiul\Desktop”
Java SDK
为了解决这个问题,我创建了一个示例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\U配置文件成功下载目录
故障排除步骤
我尝试了以下解决方案
--recursive
标志添加到CLI命令sudo aws s3 cp s3://ec sis集成测试/fiscal/
并收到以下错误
下载失败:s3://ec sis集成测试/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 s3 cp s3://ec-sis-integration-test/fiscal/collections/COLL_20201228_1-EXP ./
问题
为什么我可以使用相同的AWS_配置文件使用Java SDK而不是CLI下载文件
[WinError 5] Access is denied: 'C:\users\cmaggiul\Desktop\
这与AWS无关。您的脚本没有写入该目录的权限。您正在做两件不同的事情。awscli调用尝试复制单个对象(其键为
fiscal/
)。Java SDK调用尝试下载整个文件夹(严格来说,所有键都具有给定前缀fiscal/
)。要告诉awscli下载fiscal/
下的所有对象,请添加--recursive
。另外,我只需使用
作为目标。@jarmod当我添加--recursive键时,我得到以下错误致命错误:调用ListObjectsV2操作时发生错误(AccessDenied):拒绝访问。我需要添加该权限吗?请相信您需要在bucket上添加s3:ListBucket
。好的,让我看看是否可以添加该权限,然后重试。如果有效,我会回答,你可以写一个答案,我会接受。看起来是这样,但我真的不认为这是问题所在。我正在以管理员身份打开Powershell并手动运行它。我只是在几个不同的位置运行它来验证(在根C中,在C:\users\administrator中,等等)是否尝试旋转linux虚拟机,并检查是否存在权限问题。我打赌它确实是一些Windows FS bs,因为它使用特殊的glovesOk处理C驱动器。我将在docker映像中设置参数,然后立即尝试。请查看我的更新。它在docker容器中也不起作用。但是,它确实会在windows和linux上使用相同的目录下载特定的文件。它也不会在linux中下载该目录,尽管它会抛出不同的错误。不过,它会将特定文件下载到我在windows和linux中使用的目录中