java :使用 vfs s3 插件在 Amazon S3 中使用服务器端加密

2024-01-25

为了在 S3 中复制文件,我正在使用vfs-s3-2.2.1.jar我发现S3文件对象班级下com.intridea.io.vfs.provider.s3包裹。 我正在其中使用public void copyFrom(final FileObject file, final FileSelector selector)复制文件的方法。 在这个方法中我发现了以下代码:

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();
}

在官方参考中它使用这些方法 http://docs.aws.amazon.com/AmazonS3/latest/dev/sse-c-using-java-sdk.html

withSourceSSECustomerKey(sseKey)
withDestinationSSECustomerKey(newSseKey);

In copyFrom的方法vfs-s3-2.2.1.jar S3文件对象我找不到任何设置方法上交所客户密钥我怎样才能达到同样的效果。 感谢您看到这里。


我没有测试,但我快速查看了库/代码 - 在https://github.com/abashev/vfs-s3/blob/branch-2.3.x/src/main/java/com/intridea/io/vfs/provider/s3/S3FileSystemConfigBuilder.java https://github.com/abashev/vfs-s3/blob/branch-2.3.x/src/main/java/com/intridea/io/vfs/provider/s3/S3FileSystemConfigBuilder.java有一种方法可以设置服务器端加密

/**
 * 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);
}

所以在你打电话之前copyFrom你可以做

    S3FileSystemConfigBuilder.getInstance().setServerSideEncryption(
        S3FileSystemConfigBuilder.getInstance().getFileSystem().getFileSystemOptions(), 
        true);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java :使用 vfs s3 插件在 Amazon S3 中使用服务器端加密 的相关文章

随机推荐

  • 在 Matter.js 中旋转相机

    我正在开发一款以太空为背景的自上而下的物理游戏 我希望旋转到视图时始终显示玩家的船朝上 即使船可以旋转 我搜索了文档 但没有找到任何有关旋转世界或渲染器的信息 但我可能不知道要查找的正确术语 这对于 Matter js 来说是可能的吗 我不
  • 使用 ng-template 在 Angular 10 中仅显示博客中的相关条目

    我有一个用 Strapi 制作的博客后端 您可以在其中添加一些内容类型 例如标题字段 描述字段和内容字段 我还有一个布尔内容类型来设置博客是否相关 我在 Angular 中设置了一个 ngFor 来显示我所有的博客条目 但我只想展示相关的内
  • 为什么不同 Android 版本的 apk 大小会增加

    我创建了一个简单的应用程序 由 android studio 生成的 apk 大小为 1 MB 然后我安装在android 2 3版本大小增加到3 48 MB 然后我安装在android 5 0版本大小增加至 5 48 MB 我的问题只是为
  • socket.error:[errno 99] 无法分配请求的地址:flask 和 python

    我有同样的问题 and here https stackoverflow com questions 19246103 socket errorerrno 99 cannot assign requested address and nam
  • 单向来源困境

    我在用OneWayToSource绑定 它似乎总是将我的源属性设置为 null 为什么会这样 这给我带来了麻烦 因为我需要源属性中目标属性的值而不是 null 这是我的代码 MyViewModel cs public class MyVie
  • 使用 Aeson 解析嵌套 JSON 中的数组

    我正在尝试写一个FromJSON埃森的功能 JSON total 1 movies id 771315522 title Harry Potter and the Philosophers Stone Wizard s Collection
  • 在Android中使用notifyItemRemoved或notifyDataSetChanged与RecyclerView

    我正在创建一个要使用 RecyclerView 显示的卡片列表 其中每张卡片都有一个用于从列表中删除该卡片的按钮 当我使用通知项目已删除 要删除 RecyclerView 中的卡片 它会删除该项目并进行良好的动画处理 但列表中的数据未正确更
  • 在 PyYAML 中格式化自定义类输出

    我正在这里研究一个简单的示例 但文档仍然让我有点困惑 这是示例代码 class A yaml YAMLObject yaml tag u A def init self val self val val if name main t dat
  • XamlParseException:自定义控件中的属性丢失,但已定义!

    I 有时我的自定义控件出现以下异常 XamlParseException occurred Unknown attribute Points in element SectionClickableArea Line 10 Position
  • 将 MariaDB 与实体框架结合使用

    最近 我读到一则新闻 说 MariaDB 是 MySQL 的替代品 因为MySQL 对集群 企业版的定价不友好 http www theregister co uk 2013 09 12 google mariadb mysql migra
  • Node X-ray 从 url 集合中爬取数据

    我正在尝试在网站中抓取一个列表 该列表会指向具有相同格式的其他页面 我能够创建所有 a 标签的集合 但是当我尝试访问页面集合时 我尝试用它创建的密钥不会添加到返回的对象中 这是我尝试对堆栈溢出执行的操作的示例 var Xray requir
  • 如何在 Mac 操作系统上永久删除 Xampp?

    我用过Xampp 然后把它删除了 然后 我尝试使用Mamp 有一个错误我不明白 Mamp 作为网络服务器运行得非常完美 但是如果我想使用phpmyadmin 它就不起作用了 例如 我向数据库插入一些内容 它没有显示在 phpmyadmin
  • 多语言数据库,具有默认后备

    我知道 我有一个问题已经被广泛讨论 但在我看来 有一个方面仍然需要澄清 我正在创建一个带有多语言数据库的网络应用程序 我已经找到了一些好的实践文章 例如this https web archive org web 2014101519585
  • 关闭/重启Linux系统的shell脚本

    有没有合适的 shell 脚本来关闭或重新启动 Linux 机器 我尝试过使用 shell 脚本来关闭 但是当我输入sudo shutdown它会要求输入密码 我们如何使用脚本输入密码 我认为另一种更干净的方法 在中创建一个新文件 etc
  • Javascript 中的 Unicode 值 \uXXXX 到字符

    我以前从未这样做过 并且不确定为什么它会输出臭名昭著的内容 编码字符 关于如何输出应有的字符 ASCII Unicode 有什么想法吗 我认为 u0041 u005A应该打印A ZFirefox 报告的 UTF 8 是页面编码 var c
  • 读取文本文件时字符串索引超出范围[重复]

    这个问题在这里已经有答案了 我一直在程序的倒数第二行遇到此错误 我不知道为什么 我所做的只是从文本文件中读取一行 if items 0 86947367 with open read it txt as text file try pric
  • 如何设置组合框中选定的值?

    我在 C Windows 窗体中使用组合框 我绑定的项目列表如下 var employmentStatus new BindingList
  • 创建一个没有 init 方法的类 (Objective-c)

    是否可以创建一个没有 init 方法的类 以强制所有调用者使用工厂方法创建对象 所以基本上 您要确保您的类永远不会使用 init 进行初始化 对吧 你不能这样做exactly你想做的事 但你可以接近 由于您继承自 NSObject 因此您有
  • Android ICS 仿真相机

    我正在尝试使用模拟器查看 ICS 中的 Gallery 应用程序 因此 我启动 AVD 并用相机拍摄几张照片 然后启动图库 当我单击图库中的任何集合时 我收到错误消息 不幸的是 相机已停止 图库应用程序退出 我已经在 Mac 和 Windo
  • java :使用 vfs s3 插件在 Amazon S3 中使用服务器端加密

    为了在 S3 中复制文件 我正在使用vfs s3 2 2 1 jar我发现S3文件对象班级下com intridea io vfs provider s3包裹 我正在其中使用public void copyFrom final FileOb