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 的元数据在您创建时设置。它们是预先填写的,不能由客户修改。

您唯一能做的就是设置预期值和可选的条件。如果未提供预期的元数据值,您可以指定拒绝上传的条件。