如何在AWS Java SDK v2中通过PutObjectRequestBuilder添加自定义标头?

如何在AWS Java SDK v2中通过PutObjectRequestBuilder添加自定义标头?,java,amazon-web-services,http,amazon-s3,sdk,Java,Amazon Web Services,Http,Amazon S3,Sdk,我正在AWS Java SDK v2中使用PutObjectRequestBuilder ( ) 将文件从我的计算机传输到可公开访问的AWS S3存储桶,其他人和软件最终将从该存储桶下载文件。PutObjectRequestBuilder允许我设置将放在发送给这些人的HTTP响应头中的各种内容,例如,contentType(String contentType)允许我指定将在响应头中的Content type标记中指定的MIME类型。但我还需要为头指定一些非标准项(例如,“内容描述”=“dod

我正在AWS Java SDK v2中使用PutObjectRequestBuilder ( )
将文件从我的计算机传输到可公开访问的AWS S3存储桶,其他人和软件最终将从该存储桶下载文件。PutObjectRequestBuilder允许我设置将放在发送给这些人的HTTP响应头中的各种内容,例如,contentType(String contentType)允许我指定将在响应头中的Content type标记中指定的MIME类型。但我还需要为头指定一些非标准项(例如,“内容描述”=“dods das”),这是下载这些文件的一些客户端软件所需要的。不幸的是,我在PutObjectRequestBuilder中没有看到添加自定义头的方法。有没有办法指定自定义标题项?

不是完全自定义的,但您可以向内容添加元标记。比如:

Map<String, String> metadata = new HashMap<>();
metadata.put("x-amz-meta-my-cool-header", "woohoo");

PutObjectRequest putObjectRequest = PutObjectRequest.builder()
        .bucket(bucketName)
        .key(fileObjKeyName)
        .metadata(metadata)
        .build();
它从S3中读取指定的文件,如果存在特定的头,它会将其作为API网关头发送回。请注意,即使您必须在S3中以
x-amz-meta-
开头的对象上存储头,它也会返回,而不会返回

我在前面放了一个API网关,重要的部分是:

"/s3proxy/{fileName}" : {
  "get" : {
    "responses" : {
      "default" : {
        "description" : "Default response for GET /s3proxy/{fileName}"
      }
    },
    "x-amazon-apigateway-integration" : {
      "payloadFormatVersion" : "2.0",
      "type" : "aws_proxy",
      "httpMethod" : "POST",
      "uri" : "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:1234567890:function:s3proxy/invocations",
      "connectionType" : "INTERNET"
    }
  }
}
我会说API网关对我来说有80%的魔力,我很可能错过了一些东西。例如,我将此设置作为GET,导出为POST


显然,这里还有工作要做,Java可能不是文件服务器服务的最佳解决方案,因为在512MB的Lambda上冷启动大约需要9秒,在2048MB的Lambda上冷启动大约需要4秒。但是它做了你想做的,今天下午它很好地分散了你的注意力:)

谢谢。知道这一点很好,但这并不能解决我的问题。我不能在标题中使用例如x-amz-meta-Content-Description。它必须是,例如,内容描述,才能与我必须使用的其他系统一起使用。我需要能够指定确切的标签名。另一种可能性@BobSimons NOAAFederal现在在我更新的帖子中。
"/s3proxy/{fileName}" : {
  "get" : {
    "responses" : {
      "default" : {
        "description" : "Default response for GET /s3proxy/{fileName}"
      }
    },
    "x-amazon-apigateway-integration" : {
      "payloadFormatVersion" : "2.0",
      "type" : "aws_proxy",
      "httpMethod" : "POST",
      "uri" : "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:1234567890:function:s3proxy/invocations",
      "connectionType" : "INTERNET"
    }
  }
}