2016-11-22 74 views
0

我試圖直接從流中上傳blob,因爲我不知道流的長度,所以我決定嘗試使用this answer使用BlobOutputStream在Azure上傳blob

這不起作用,即使它從流中讀取並且不會拋出任何異常,但內容未上傳到我的容器。

我從文件上傳沒有問題,它只發生在從流上傳時。

這是我的代碼,我增加了一些奏,以檢查它是否在讀什麼或不但是這不是問題:

try { 
    CloudBlockBlob blob = PublicContainer.getBlockBlobReference(externalFileName); 
    if (externalFileName.endsWith(".tmp")) { 
     blob.getProperties().setContentType("image/jpeg"); 
    } 
    BlobOutputStream blobOutputStream = blob.openOutputStream(); 
    int next = input.read(); 
    while (next != -1) { 
     System.err.println("writes"); 
     blobOutputStream.write(next); 
     next = input.read(); 
    } 
    blobOutputStream.close(); 
    return blob.getUri().toString(); 

} catch (Exception usex) { 
    System.err.println("ERROR " + usex.getMessage()); 
    return ""; 
} 

它不會失敗,但它不工作。

是否有另一種方法呢?或者我錯過了什麼?

更新:我一直在檢查,我認爲問題是與InputStream本身,但我不知道爲什麼,因爲相同的流將工作得很好,如果我使用它上傳到Amazon S3的實例

回答

1

我試圖重現您的問題,但失敗。根據你的代碼,它似乎是唯一明顯的缺失就是沒有通過blobOutputStream.close();關閉輸出流之前調用blobOutputStream.flush();,但它的作品,如果缺少flush方法

這裏是下面我的測試代碼。

String STORAGE_CONNECTION_STRING_TEMPLATE = "DefaultEndpointsProtocol=https;AccountName=%s;AccountKey=%s;"; 

String accountName = "xxxx"; 
String key = "XXXXXX"; 
CloudStorageAccount account = CloudStorageAccount.parse(String.format(STORAGE_CONNECTION_STRING_TEMPLATE, accountName, key)); 
CloudBlobClient client = account.createCloudBlobClient(); 
CloudBlobContainer container = client.getContainerReference("mycontainer"); 
container.createIfNotExists(); 
String externalFileName = "test.tmp"; 
CloudBlockBlob blob = container.getBlockBlobReference(externalFileName); 
if (externalFileName.endsWith(".tmp")) { 
    blob.getProperties().setContentType("image/jpeg"); 
} 
BlobOutputStream blobOutputStream = blob.openOutputStream(); 
String fileName = "test.jpg"; 
InputStream input = new FileInputStream(fileName); 
int next = -1; 
while((next = input.read()) != -1) { 
    blobOutputStream.write(next); 
} 
blobOutputStream.close(); // missing in your code, but works if missing. 
input.close(); 

如果你能在更多的細節更新,我認爲這是淺析淺析問題方面的幫助。任何問題,請隨時讓我知道。

+0

謝謝,我會試着找出問題所在,因爲它似乎可以很好地運作 – moondaisy