【问题标题】:How to copy from one minio server to another?如何从一个minio服务器复制到另一个?
【发布时间】:2021-01-29 20:57:45
【问题描述】:

我正在使用 Minio 的 JAVA SDK。我设法在同一个 Minio Server 中复制对象。有没有办法将对象从一台 Minio 服务器复制到另一台?

我已尝试使用以下代码:

InputStream inputStream = minioClientServer1.getObject(getBucket(), fileName);
minioClientServer2.putObject(getBucket(), fileName, inputStream, (long) inputStream.available(), null, null, contentType);

那是我从一台服务器获取对象,然后上传到下一台。我面临的问题是 contentType 未知。

有没有办法在不对内容类型进行硬编码的情况下做到这一点? 还是将对象下载到文件然后上传是更好的方法?

【问题讨论】:

    标签: java minio


    【解决方案1】:

    我不确定这是否适用于您,因为您没有提供足够的信息让我确定我们谈论的是同一个 SDK。但从您所展示的内容来看,您应该能够以与调用 getObject 相同的方式调用 statObject 并获取特定 S3 对象的 ObjectStat 实例而不是 InputStream 实例。一旦你有了一个ObjectStat 实例,你应该可以在它上面调用contentType 方法来获取S3 对象的内容类型。

    这应该可以满足您的要求:

    ObjectStat objectStat = minioClientServer1.statObject(getBucket(), fileName);
    InputStream inputStream = minioClientServer1.getObject(getBucket(), fileName);
    minioClientServer2.putObject(getBucket(), fileName, inputStream, (long) inputStream.available(), null, null, objectStat.contentType());
    

    【讨论】:

    • 我得到了一个 ProtocolException:当我使用 putObject 时,预期需要 0 个字节 8192 个字节。
    • @MohendraAmatya - 打印出 objectStat.contentType() 值或在调试器中停下来看看它是什么。该值要么是对象的正确类型,要么不是。类型是来自新调用还是硬编码都无关紧要。如果它是相同的字符串,它应该具有相同的效果。所以问题是你从元数据中得到什么作为类型值。 - 你是说如果你对类型类型进行硬编码,相同的副本可以工作吗?如果不是,那么这听起来可能是一个不同的问题。
    • 我得到了内容类型,但是当我使用 putObject 上传 inputStream 时,我得到了 ProtocolException。有没有办法解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2022-11-09
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多