- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 S3 中有一个存储桶,其结构和内容如下:
javaFolderA/
└── javaFolderB/
└── javaFile.tmp
consoleFolderA/
└── consoleFolderB/
└── consoleFile.tmp
java*
文件夹和文件是通过 Java SDK 上传的:
final File file = new File("C:\\javaFolderA\\javaFolderB\\javaFile.tmp");
client.putObject("testbucket", "javaFolderA/javaFolderB/javaFile.tmp", file);
console*
文件夹和文件是从 Web 控制台创建/上传的(单击每个文件夹的“+ 创建文件夹”按钮,然后使用公共(public)读取权限上传文件)。
在 Web 控制台中,单击创建新存储桶后,会显示以下消息:
When you create a folder, S3 console creates an object with the above name appended by suffix "/" and that object is displayed as a folder in the S3 console.
因此,正如预期的那样,通过上面的文件夹和文件,我们在存储桶中创建了 3 个具有以下键的对象:
consoleFolderA/
consoleFolderA/consoleFolderB/
consoleFolderA/consoleFolderB/consoleFile.tmp
SDK 上传的结果是单个对象,其键为:javaFolderA/javaFolderB/javaFile.tmp
。这是有道理的,因为我们只放置一个对象,而不是三个。但是,这会导致列出存储桶内容时出现不一致。即使每个目录中只有一个实际文件,列出内容也会在控制台场景中返回多个文件。
我的问题是为什么会出现这种情况,以及如何实现一致的行为?似乎没有办法通过 SDK“上传目录”(用引号引起来,因为我知道实际上没有文件夹/目录)。
通过 CLI,我可以验证对象的数量及其 key :
C:\Users\avojak>aws s3api list-objects --bucket testbucket
{
"Contents": [
{
"LastModified": "2018-01-02T22:43:55.000Z",
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"StorageClass": "STANDARD",
"Key": "consoleFolderA/",
"Owner": {
"DisplayName": "foo.bar",
"ID": "2c401638471162eda7a3b48e41dfb9261d9022b56ce6b00c0ecf544b3e99ca93"
},
"Size": 0
},
{
"LastModified": "2018-01-02T22:44:02.000Z",
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"StorageClass": "STANDARD",
"Key": "consoleFolderA/consoleFolderB/",
"Owner": {
"DisplayName": "foo.bar",
"ID": "2c401638471162eda7a3b48e41dfb9261d9022b56ce6b00c0ecf544b3e99ca93"
},
"Size": 0
},
{
"LastModified": "2018-01-02T22:44:16.000Z",
"ETag": "\"968fe74fc49094990b0b5c42fc94de19\"",
"StorageClass": "STANDARD",
"Key": "consoleFolderA/consoleFolderB/consoleFile.tmp",
"Owner": {
"DisplayName": "foo.bar",
"ID": "2c401638471162eda7a3b48e41dfb9261d9022b56ce6b00c0ecf544b3e99ca93"
},
"Size": 69014
},
{
"LastModified": "2018-01-02T22:53:13.000Z",
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"StorageClass": "STANDARD",
"Key": "javaFolderA/javaFolderB/javaFile.tmp",
"Owner": {
"DisplayName": "foo.bar",
"ID": "2c401638471162eda7a3b48e41dfb9261d9022b56ce6b00c0ecf544b3e99ca93"
},
"Size": 0
}
]
}
最佳答案
如果您更喜欢控制台实现,那么您需要模拟它。这意味着您的 SDK 客户端需要在必要时创建中间“文件夹”。您可以通过创建零大小的对象来实现此目的,这些对象的键以正斜杠结尾(如果这是您的“文件夹”分隔符)。
AWS 控制台以这种方式运行,允许您创建“文件夹”,因为许多 AWS 控制台用户对文件夹和文件的概念比对对象(和键)的概念更熟悉。
但是,在我看来,很少需要这样做。您的 SDK 客户端应该能够处理这些“文件夹”的存在和不存在。更多信息here .
关于java - 通过 Java SDK 和 AWS 控制台上传时列出不同的 S3 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069409/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!