AWS S3 预签名 URL 元数据
AWS S3 Pre Signed URL with Metadata
这是我尝试使用预签名的 AWS S3 URL.
上传包含一些自定义元数据的文档的代码片段
try (CloseableHttpClient httpClient = HttpClients.createSystem()) {
var tempFile = File.createTempFile(document.getName(), FilenameUtils.getExtension(document.getOriginalFilename()));
document.transferTo(tempFile);
var fileEntity = new FileEntity(tempFile);
var httpPut = new HttpPut(url);
// Here 403 httpPut.setHeader("x-amz-meta-title", "Test Title");
httpPut.setEntity(fileEntity);
var response = httpClient.execute(httpPut);
log.info("HTTP response code {}", response.getStatusLine().getStatusCode());
} catch (IOException e) {
log.error("Oops! Error", e);
}
不幸的是,如上所述设置自定义 header 会抛出 403。当我取出 header 时它工作正常。当你添加一个不相关的元数据键说“abc”时,甚至工作正常 - 显然没有添加元数据,但是 returns 200 OK。只有当您指定“x-amz-meta-”时才会出现此问题。
有什么想法吗?
预签名 url 的元数据在您创建时设置。它们是预先填写的,不能由客户修改。
您唯一能做的就是设置预期值和可选的条件。如果未提供预期的元数据值,您可以指定拒绝上传的条件。
这是我尝试使用预签名的 AWS S3 URL.
上传包含一些自定义元数据的文档的代码片段 try (CloseableHttpClient httpClient = HttpClients.createSystem()) {
var tempFile = File.createTempFile(document.getName(), FilenameUtils.getExtension(document.getOriginalFilename()));
document.transferTo(tempFile);
var fileEntity = new FileEntity(tempFile);
var httpPut = new HttpPut(url);
// Here 403 httpPut.setHeader("x-amz-meta-title", "Test Title");
httpPut.setEntity(fileEntity);
var response = httpClient.execute(httpPut);
log.info("HTTP response code {}", response.getStatusLine().getStatusCode());
} catch (IOException e) {
log.error("Oops! Error", e);
}
不幸的是,如上所述设置自定义 header 会抛出 403。当我取出 header 时它工作正常。当你添加一个不相关的元数据键说“abc”时,甚至工作正常 - 显然没有添加元数据,但是 returns 200 OK。只有当您指定“x-amz-meta-”时才会出现此问题。
有什么想法吗?
预签名 url 的元数据在您创建时设置。它们是预先填写的,不能由客户修改。
您唯一能做的就是设置预期值和可选的条件。如果未提供预期的元数据值,您可以指定拒绝上传的条件。