1

这是我的代码示例:

    属性 props = new Properties();
    props.setProperty(KeystoneProperties.CREDENTIAL_TYPE, CredentialTypes.API_ACCESS_KEY_CREDENTIALS);
    上下文 = ContextBuilder.newBuilder("hpcloud-objectstorage")
        .overrides(道具)
        .credentials(api_key, api_secret)
        .buildView(BlobStoreContext.class);
    存储 = context.getBlobStore();

    // 这行得通
    Blob blob1 = store.blobBuilder("file1")
        .payload("")
        。建造();

    字符串 blobName1 = store.putBlob(remoteFolderName, blob1);

    // 这与消息一起崩溃,您可以在下面看到
    Blob blob2 = store.blobBuilder("file2")
        .payload("a")
        。建造();

    字符串 blobName1 = store.putBlob(remoteFolderName, blob2);

执行此代码后收到的异常消息如下:

    2012 年 11 月 7 日 7:08:44 PM org.jclouds.logging.jdk.JDKLogger logError
    Schwerwiegend:服务器错误后无法重试,命令已超出重试限制 5:[method=HPCloudObjectStorageAsyncApi.putObject, request=PUT https://region-a.geo-1.objects.hpcloudsvc.com/v1/82797321453196/cloudstoretest/file2 HTTP/1.1]

这里是堆栈跟踪:

    org.jclouds.http.HttpResponseException:连接到 PUT https://region-a.geo-1.objects.hpcloudsvc.com/v1/82797321453196/cloudstoretest/tada%21 HTTP/1.1 的服务器的文件意外结束
    在 org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:179)
    在 org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:135)
    ...

我没有任何线索,可能是什么问题。我正在寻找可能的解决方案 2 天,但没有任何结果。如果有人有想法,我会很高兴,我做错了什么......

4

1 回答 1

0

看起来您的 blob 的名称实际上是“tada!” 基于 url 编码的“tada%21”

openstack swift 实现很可能不支持名称包含尾随“!”的 blob。您可以尝试其他命名约定并查看是否有相同的错误吗?

于 2012-11-17T18:42:31.807 回答