我正在使用Amazon SDK,並且我有一種方法可爲存儲在Amazon S3服務中的對象返回一個Stream。處理響應後與Amazon S3響應流配合使用
它包含了這樣的事情:
var request = new GetObjectRequest().WithBucketName(bucketName).WithKey(keyName);
using (var response = client.GetObject(request))
{
return response.ResponseStream;
}
顯然,這樣做的時候,流因爲請求對象已被釋放,當做到這一點,它關閉了流不是由調用方法可讀。
我不想將文件下載到MemoryStream或FileStream。
如果我不使用using子句,那麼垃圾收集器將在某個點處置請求對象,所以我不能不使用它。
我問的是,有沒有辦法將流包裝或複製到另一個流,然後返回它,而無需下載文件?
我正在使用.NET 3.5。
編輯:該方法是從一個抽象類繼承而來的,而調用者方法並不知道它正在與Amazon一起工作。所以它必須返回一個Stream。
我會嘗試第二個選項,如果有效,我會告訴你。 – spakinz 2011-06-02 12:02:01
它工作完美,謝謝@Samuel – spakinz 2011-06-02 12:14:06
我引用第二和第三選項,但請注意第三!是的,它是最安全的,因爲它在回調後立即處理資源,但不能將流保存在操作之外,因爲它是參考。我認爲這對於不瞭解lambda函數範圍的同事來說更容易出錯。 我最好的是第二個。我希望新手程序員也能理解接口IDisposable的含義。您在代碼中使用的每個班級都必須檢查它是否是一次性的且管理良好。 – 2017-06-28 14:31:42