2016-03-09 11 views
5

Do kopiowania plików w S3, używam VFS-s3-2.2.1.jar znalazłem S3FileObject klasę pod com.intridea. Pakiet io.vfs.provider.s3. W której używam metody kopiowania pliku. W tej metodzie znalazłem następujący kod:java: Używaj szyfrowania po stronie serwera w Amazon S3 przy użyciu VFS s3 wtyczki

try { 
    if (srcFile.getType().hasChildren()) { 
     destFile.createFolder(); 
     // do server side copy if both source and dest are in S3 and using same credentials 
    } else if (srcFile instanceof S3FileObject) { 
     S3FileObject s3SrcFile = (S3FileObject)srcFile; 
     String srcBucketName = s3SrcFile.getBucket().getName(); 
     String srcFileName = s3SrcFile.getS3Key(); 
     String destBucketName = destFile.getBucket().getName(); 
     String destFileName = destFile.getS3Key(); 
     CopyObjectRequest copy = new CopyObjectRequest(
       srcBucketName, srcFileName, destBucketName, destFileName); 
     if (srcFile.getType() == FileType.FILE && getServerSideEncryption()) { 
      ObjectMetadata meta = s3SrcFile.getObjectMetadata(); 
      meta.setSSEAlgorithm(AES_256_SERVER_SIDE_ENCRYPTION); 
      copy.setNewObjectMetadata(meta); 
     } 
     getService().copyObject(copy); 
    } else if (srcFile.getType().hasContent() && srcFile.getURL().getProtocol().equals("file")) { 
     // do direct upload from file to avoid overhead of making a copy of the file 
     try { 
      File localFile = new File(srcFile.getURL().toURI()); 
      destFile.upload(localFile); 
     } catch (URISyntaxException e) { 
      // couldn't convert URL to URI, but should still be able to do the slower way 
      super.copyFrom(file, selector); 
     } 
    } else { 
     super.copyFrom(file, selector); 
    } 
} catch (IOException e) { 
    throw new FileSystemException("vfs.provider/copy-file.error", new Object[]{srcFile, destFile}, e); 
} catch (AmazonClientException e) { 
    throw new FileSystemException("vfs.provider/copy-file.error", new Object[]{srcFile, destFile}, e); 
} finally { 
    destFile.close(); 
} 

In official reference it uses these method

withSourceSSECustomerKey(sseKey) 
withDestinationSSECustomerKey(newSseKey); 

W copyfrom metoda VFS-s3-2.2.1.jarS3FileObject nie mogę znaleźć dowolna metoda ustawiania SSECustomerKeyJak mogę osiągnąć to samo. Dzięki za spoglądanie tutaj.

Odpowiedz

3

nie testowałem, ale patrzę na lib/kodu szybko - w https://github.com/abashev/vfs-s3/blob/branch-2.3.x/src/main/java/com/intridea/io/vfs/provider/s3/S3FileSystemConfigBuilder.java istnieje metoda, aby ustawić szyfrowanie po stronie serwera

/** 
* use server-side encryption. 
* 
* @param opts The FileSystemOptions. 
* @param serverSideEncryption true if server-side encryption should be used. 
*/ 
public void setServerSideEncryption(FileSystemOptions opts, boolean serverSideEncryption) 
{ 
    setParam(opts, SERVER_SIDE_ENCRYPTION, serverSideEncryption); 
} 

więc przed jesteś nazywając copyFrom można zrobić

S3FileSystemConfigBuilder.getInstance().setServerSideEncryption(
     S3FileSystemConfigBuilder.getInstance().getFileSystem().getFileSystemOptions(), 
     true);