2010-05-04 35 views
1

我在寫一個需要返回對二進制文件引用的類接口。通常我會提供對文件的引用作爲文件路徑。但是,我正在考慮將一些文件(如小縮略圖)直接存儲在數據庫中,而不是在文件系統上。在這種情況下,我不想添加額外的步驟從數據庫中讀取縮略圖到光盤上,然後返回文件的路徑供我的程序讀取。我希望直接從數據庫流式傳輸圖像到我的程序中,並避免向光盤寫入任何內容,除非用戶明確要保存內容。我可以將FileStream作爲文件的通用接口返回嗎?

將我的界面返回FileStream甚至Image是否有意義?然後,由實施班級來確定FileStreamImage的來源是否是光盤上的文件或數據庫中的二進制數據。

public interface MyInterface 
{ 
    string Thumbnail {get;} 
    string Attachment {get;} 
} 

VS

public interface MyInterface 
{ 
    Image Thumbnail {get;} 
    FileStream Attachment {get;} 
} 

回答

1

對於使用像縮略圖那樣清晰的小內容,我認爲您最好在返回類型時使用它(即圖片)。如果你有大量的內容,其目的可能會有所不同,或者他們可能是部分閱讀的理由,那麼Stream是他們的選擇。無論哪種情況,內容的來源對於課程的用戶都是隱藏的。您還需要考慮流的處理語義以及是否希望該類的用戶能夠控制數據庫連接保持打開狀態的時間。

+0

爲什麼在FileStream上流? – 2010-05-04 21:09:08

+0

它從調用者中提取內容的來源。如果流可能是不同的源文件或某種數據庫blob,這是特別有用的。它也可以是一個MemoryStream。假設您最初開始使用某種數據庫blob流,然後決定先讀取整個blob,則可以切換到MemoryStream而不會影響調用者。一般來說,我總是使用Stream,除非調用者需要知道它是什麼類型的流。 (而且我至少在我的代碼中記不清這種情況是否屬實。) – jdasilva 2010-05-05 15:49:42

2

你可以返回一個Stream對象,流到任何一個文件或數據庫

1

你可以使用一個byte[]表示該文件如果它的大小是不是很大並適合於記憶。否則Stream是好的,但請確保您執行IDisposable以正確釋放它。

+0

最大的任何已知文件將是〜200kb。附件可以是任何東西,但我可以將它們限制在最大尺寸。 – 2010-05-04 21:10:42

2

您可以。但是我會改變界面看起來更像:

public interface MyInterface 
{ 
    Image CreateThumbnail(); 
    FileStream CreateAttachment(); 
} 

這解決了關於返回對象的生命週期的任何歧義;例如,防止他們從你身邊擺脫出來。

相關問題