Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在S3中覆盖文件时保留元数据_Java_Amazon S3 - Fatal编程技术网

Java 在S3中覆盖文件时保留元数据

Java 在S3中覆盖文件时保留元数据,java,amazon-s3,Java,Amazon S3,当我将文件覆盖到S3时,我会丢失元数据,因为它被视为一个新对象。在S3中重写文件时,我试图保留文件的现有原始元数据。我从文档中了解到,您无法修改S3存储桶中对象的元数据,但如何将现有元数据“复制”到新覆盖的对象上 例如,我有以下方法: public void uploadToS3(File file, String key, String bucketName) { // original metadata ObjectMetadata objMetadata = client.

当我将文件覆盖到S3时,我会丢失元数据,因为它被视为一个新对象。在S3中重写文件时,我试图保留文件的现有原始元数据。我从文档中了解到,您无法修改S3存储桶中对象的元数据,但如何将现有元数据“复制”到新覆盖的对象上

例如,我有以下方法:

public void uploadToS3(File file, String key, String bucketName) {
    // original metadata
    ObjectMetadata objMetadata = client.getObjectMetadata(bucketName, key);
    // How do I set the new overwritten object to have this metadata above??

    try {
        client.putObject(new PutObjectRequest(bucketName, key, file));
    } catch (AmazonServiceException e) {
        e.printstacktrace();
    } catch(AmazonClientException e) {
        e.printstacktrace();
    } 
如何“指向”新对象,使其与刚被覆盖的对象具有相同的元数据?

调用前,先调用

请注意,根据上的S3文档,只允许更新某些元数据。因此,您可能需要采取额外的步骤来确保您的请求不会试图修改不应该修改的内容

ObjectMetadata objMetadata = client.getObjectMetadata(bucketName, key);
// Call a helper method that clones only what you need to maintain in the metadata.
ObjectMetadata clonedMetadata = cloneMetadata(objMetadata);
client.putObject(new PutObjectRequest(bucketName, key, file)
        .withMetadata(objMetadata));
ObjectMetadata objMetadata = client.getObjectMetadata(bucketName, key);
// Call a helper method that clones only what you need to maintain in the metadata.
ObjectMetadata clonedMetadata = cloneMetadata(objMetadata);
client.putObject(new PutObjectRequest(bucketName, key, file)
        .withMetadata(objMetadata));