2012-11-07 25 views
1

這裏是我的代碼爲例:HP-雲存儲:不能上傳一個blob與有效載荷

 
    Properties props = new Properties(); 
    props.setProperty(KeystoneProperties.CREDENTIAL_TYPE, CredentialTypes.API_ACCESS_KEY_CREDENTIALS); 
    context = ContextBuilder.newBuilder("hpcloud-objectstorage") 
     .overrides(props) 
     .credentials(api_key, api_secret) 
     .buildView(BlobStoreContext.class); 
    store = context.getBlobStore(); 

    // this works 
    Blob blob1 = store.blobBuilder("file1") 
     .payload("") 
     .build(); 

    String blobName1 = store.putBlob(remoteFolderName, blob1); 

    // this crashes with the message, you can see below 
    Blob blob2 = store.blobBuilder("file2") 
     .payload("a") 
     .build(); 

    String blobName1 = store.putBlob(remoteFolderName, blob2); 

異常消息執行此代碼後,我得到的是以下幾點:

 
    Nov 07, 2012 7:08:44 PM org.jclouds.logging.jdk.JDKLogger logError 
    Schwerwiegend: Cannot retry after server error, command has exceeded retry limit 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: Unexpected end of file from server connecting to PUT https://region-a.geo-1.objects.hpcloudsvc.com/v1/82797321453196/cloudstoretest/tada%21 HTTP/1.1 
    at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:179) 
    at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:135) 
    ... 

我沒有任何線索,問題可能是什麼。我正在尋找2天的可能解決方案,但沒有任何結果。我會很高興,如果有人有一個想法,我做錯了什麼...

回答

0

看起來像你的blob的名字是字面上「tada!」基於url編碼「tada%21」

openstack swift實現不太可能支持包含尾部'!'的名稱的blob。你可以嘗試其他命名約定,看看你是否有同樣的錯誤?

+0

Sry,「tada!」是我的錯誤,試圖編輯我的這篇文章的代碼。我曾嘗試過不同名稱的代碼,但它不起作用。 – BloodyD

+0

真正的問題是當你傳遞給.payload()一個字符串。我已經通過將FileInputStream(文件,我想上傳)傳遞給有效載荷來解決此問題。現在它可以工作。我想,如果你傳遞一個字符串,它將被作爲一個文件路徑處理。 – BloodyD