2016-03-08 1058 views
2

我正在嘗試使用Amazon S3 JAVA sdk獲取文件大小(內容長度)。從S3存儲桶獲取文件大小

public Long getObjectSize(AmazonS3Client amazonS3Client, String bucket, String key) 
     throws IOException { 
    Long size = null; 
    S3Object object = null; 
    try { 
     object = amazonS3Client.getObject(bucket, key); 
     size = object.getObjectMetadata().getContentLength(); 

    } finally { 
     if (object != null) { 
      //object.close(); 
      1. This results in 50 calls (connection pool size) post that I start getting connection pool errors. 
      2. If this line is uncommented it takes hell lot of time to make calls. 
     } 
    } 
    return size; 
} 

我跟着thisthis。但不知道我在這裏做錯了什麼。 對此有何幫助?

+0

請閱讀此:http://stackoverflow.com/help/how-to-ask然後更新您的問題,以確切指出您的問題是什麼。你有錯誤嗎?你得到不正確的文件大小?你的代碼中有一些關於調用'object.close()'的註釋需要很長時間,但是這似乎與獲取對象文件大小的問題完全不同。 –

回答

4

我猜你的實際問題是問什麼,但我認爲你可以減少你的代碼,並消除需要做類似的東西都創建一個s3Object:

public Long getObjectSize(AmazonS3Client amazonS3Client, String bucket, String key) 
     throws IOException { 
    return amazonS3Client.getObjectMetadata(bucket, key).getContentLength(); 
} 

這應該刪除需要致電object.close(),您似乎遇到問題。

+0

也許,會得到更好的使用getInstanceLenght()代替getContentLenght(),因爲如果你有選擇地下載各種使用setRange()的文件,內容長度讓你在這種情況下將是請求的HTTP內容長度的範圍(例如,對於setRange(0,100),getContentLength()將返回100而不是實際的文件大小) –

相關問題