上传到OpenStack Multipart With Path

时间:2018-04-03 15:02:02

标签: java openstack-swift jclouds

我使用java Jclouds上传到OpenStack Swift内的容器,上传在root上正常,但是当我传递路径(包含文件夹然后文件)时,文件上传但也创建具有相同文件名的另一个文件夹。原始文件名是 8mb.bin

代码是:

try {
    ByteSource fileBytes = Files.asByteSource(file);
    File file = new File(filePath);
    String name = "test/test2/" + file.getName();
    Blob blob = blobStore.blobBuilder(name)
        .userMetadata(ImmutableMap.of("ContentType", contentType, "test", String.valueOf(test)))
        .payload(fileBytes)
        .contentLength(file.length())
        .contentType(contentType)
        .build();

    ///sednig the request
    blobStore.putBlob(ContainerName, blob, multipart());
    return contentLength;    
}

并在指定的路径中像这样: enter image description here

文件夹8mb.bin包含其中的路径/slo/1522766773.076000/8200000/33554432,然后是名为 00000000 的文件,其大小与原始文件大小相同。

如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:1)

jclouds使用Static Large Objects实现Swift multipart。这具有以下限制:部件存在于与清单相同的命名空间中,并且修改或删除部件使清单无效。 JCLOUDS-1285建议将部件放在另一个容器中以清理对象列表,尽管这需要一些额外的逻辑来删除和覆盖。