我正在尝试从S3读取一个加密对象,然后用不同的加密密钥将其上传到S3中的一个新bucket中。而我正在尝试使用getObject()读取对象,并尝试使用PutObject请求放置对象。
当我打印源代码的内容长度时,它是964481376。那么,数据长度从何而来?是964481363
内容类型
二进制/二进制八位数流
x-amz-元-x-amz-未加密-内容-长度
我不能共享KMS密钥。
public boolean copyS3Object(AmazonS3Encryption sourceS3Client, AmazonS3URI sourceS3Uri,
AmazonS3Encryption destS3Client, AmazonS3URI destS3Uri) throws AmazonServiceException, IOException {
//String eTag;
S3Object sourceS3Object = null;
try {
//Get the Source object stream
sourceS3Object = sourceS3Client.getObject(sourceS3Uri.getBucket(), sourceS3Uri.getKey());
ObjectMetadata objectMetadata = sourceS3Object.getObjectMetadata();
System.out.println("content length " + objectMetadata.getContentLength());
PutObjectRequest putRequest = new PutObjectRequest(destS3Uri.getBucket(), destS3Uri.getKey(),
sourceS3Object.getObjectContent(), sourceS3Object.getObjectMetadata());
destS3Client.putObject(putRequest);
//
// if (eTag.isEmpty()) {
// System.out.println("Copy failed, New object in " + destS3Uri.toString() + " is empty");
// return false;
// }
} catch (AmazonServiceException e) {
throw e;
} finally {
if (sourceS3Object != null) {
sourceS3Object.close();
}
}
//System.out.println("Copied successfully to " + destS3Uri.toString() + " Etag:" + eTag);
return true;
}
但我得到以下错误:
我想出了问题所在。S3对象的内容长度是加密后的数据长度。但当我放置对象时,我正在尝试放置未加密的数据。所以我需要显式地将对象的内容长度设置为未加密长度。下面的代码解决了这个问题。
try {
//Get the Source object stream
sourceS3Object = sourceS3Client.getObject(sourceS3Uri.getBucket(), sourceS3Uri.getKey());
//For a decrypted object, the content length in metadata has the encrypted length
//Set the content length to the unencrypted-data-length
ObjectMetadata objectMetadata = sourceS3Object.getObjectMetadata();
Map<String, String> modelMetaData = objectMetadata.getUserMetadata();
Long unencryptedDataLength = Long.parseLong(modelMetaData.get(
"x-amz-unencrypted-content-length"));
objectMetadata.setContentLength(unencryptedDataLength);
PutObjectRequest putRequest = new PutObjectRequest(destS3Uri.getBucket(), destS3Uri.getKey(),
sourceS3Object.getObjectContent(), objectMetadata);
eTag = destS3Client.putObject(putRequest).getETag();
if (eTag.isEmpty()) {
System.out.println("Copy failed, New object in " + destS3Uri.toString() + " is empty");
return false;
}
我试图在corda中设置一个percona集群(mysql)以实现高可用性,我配置了其他所有内容,同时试图引入corda节点(公证),我得到以下错误:
我正在user_views上运行一个查询。“TEXT”列是LONG数据类型的。所以,当我在where子句中使用该列时,我得到了预期的错误。 错误:ORA-00932:不一致的数据类型:预期数过长 查询是 这个怎么解决?
以下是我的Java应用程序中的一个函数: 例如,在我的数据库中,我有和。因为我可以在我的查询中使用十进制运算,所以我的参数是一个,我在应用程序中输入20.00。 在我的数据对象中,是一个,是一个
我正在尝试生成“原始”的未编码ECDSA签名,用于加密芯片。目标是在主机pc上签名,然后将其发送到芯片进行验证。然而,我遇到了一个小问题。我的理解是ECDSA签名应该是64字节(对于secp256v1)。而且,当我使用芯片生成签名时,它的长度确实是64字节。然而,当我使用openssl时,签名长度为71字节。签名的开头似乎是某种前缀,但我找不到关于它的任何数据。 以下是我尝试做每件事情的方式: 生
假设我有一些账单,上面有开始日期和结束日期。 我要检查的商业规则是 例如,3月10日到4月9日大约相隔一个月,所以我用它来检查任何两个连续的账单开始日期(4月10日和3月10日)是否相隔一个月。 现在我的问题是求周期的长度。例如,假设我有以下数据集 我正在使用JodaTime库,所以我说类似这样的话 它返回0,这是正确的,但没有用处。 结果是1,尽管相隔一天。 有什么更好的方法来做到这一点?我可以
问题内容: 我正在尝试获取新的数据集,或将当前数据集列的值更改为其唯一值。这是我尝试获得的示例: 我不太在乎索引,但这似乎是问题所在。到目前为止,我的代码非常简单,我尝试了两种方法,一种是使用新的dataFrame,另一种是不使用。 两次都出现错误“值的长度与索引的长度不匹配”。 问题答案: 当您尝试向数据帧分配不同长度的numpy数组列表时,会出现此错误,并且可以按以下方式重现该错误: 四行数据