如何在AWS Java SDK v2中通过PutObjectRequestBuilder添加自定义标头?
我正在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 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"
}
}
}