使用PowerShell上传文件至AWS S3存储桶子文件夹遇问题
解决PowerShell上传S3文件时重复创建文件夹的问题
首先要明确:AWS S3不存在物理意义上的文件夹,所谓的“文件夹”只是通过对象Key的前缀来模拟显示的。比如对象Key为Folder/Subfolder/MyFile.txt,S3控制台会自动解析前缀Folder/Subfolder/并显示为层级文件夹,但这不是真实的文件夹对象。
针对你的问题,逐一分析并给出解决方案:
问题根源
你尝试的三个命令中,只有第一个是符合正确逻辑的写法,但出现“创建新文件夹”的现象,大概率是以下原因:
- Key大小写不一致:S3的对象Key是区分大小写的,如果你原有的前缀是
folder/subfolder/(小写),但命令中用了Folder/Subfolder/(大写),S3会将其识别为不同的前缀,控制台就会显示出“新文件夹”。 - 错误命令创建了多余对象:第二个命令会将文件上传为Key是
Folder/Subfolder/的对象(模拟空文件夹的对象),第三个命令会创建Key为Folder/Subfolder的无斜杠对象,这些多余对象会让控制台显示出混乱的层级结构。
正确操作步骤
使用标准命令上传:直接用第一个命令的写法,确保
-Key参数中的路径和目标前缀完全一致(包括大小写):Write-S3Object -BucketName MyBucketName -Key Folder/Subfolder/MyFile.txt -File $filepath这个命令会直接将文件上传为
Folder/Subfolder/MyFile.txt对象,不会创建额外的文件夹对象,原有的前缀层级会自动匹配显示。清理多余对象:如果之前用错误命令创建了多余的对象(比如
Folder/Subfolder/或Folder/Subfolder),可以在S3控制台或通过PowerShell命令删除这些对象,控制台的层级显示就会恢复正常。批量上传推荐用法:如果需要批量上传文件到指定前缀下,推荐使用
-KeyPrefix参数,无需手动指定每个文件的完整Key:Write-S3Object -BucketName MyBucketName -KeyPrefix Folder/Subfolder/ -File $filepath这个命令会自动保留原文件名,将文件上传到
Folder/Subfolder/[原文件名]的路径下。
内容的提问来源于stack exchange,提问作者Tayana Barr
相关产品推荐
相关产品推荐

