2011-06-07 74 views
0

在我的項目中,用戶可以將文件上傳到1GB。我想將上傳的文件流數據複製到第二個流。 如果我這樣使用如何將一個Stream對象值複製到asp.net中的第二個Stream對象

int i; 
while ((i = fuVideo.FileContent.ReadByte()) != -1) 
{ 
    strm.WriteByte((byte)i); 
} 

那麼它需要這麼多時間。

如果我嘗試通過字節數組來做到這一點,那麼我需要在long中添加無效的數組大小。

如果有人有更好的想法做到這一點,那麼請讓我知道。

-

嗨凱布利感謝your response。我試過Stream.Copy,但它花費了很多時間將一個流對象複製到第二個。

我試過8.02Mb文件,花了3到4分鐘。 我添加的代碼是

Stream fs = fuVideo.FileContent; //fileInf.OpenRead(); 

Stream strm = ftp.GetRequestStream(); 
fs.CopyTo(strm); 

如果我做錯了什麼,那麼請讓我知道。

+0

更新我的迴應。 – Khepri 2011-06-07 15:41:40

回答

1

這是.NET 4.0嗎?

如果這樣Stream.CopyTo可能是您最好的選擇。

如果沒有,並在信用到期時給予信用,請參閱this SO thread.中的答案如果您不是.NET 4.0,請務必閱讀該主題中的註釋,因爲有一些替代解決方案(Async stream reading/writing)可能是值得調查,如果表現是絕對的溢價可能是你的情況。

編輯:

基於斷更新,你想將文件複製到另一個遠程目標? (只是猜測基於GetRequestStream()[GetRequestStream()]。時間將是文件內容到目的地的實際傳輸。因此,在這種情況下,當您執行fs.CopyTo(strm)時,必須將這些字節從源數據流到遠程服務器,這就是時間的來源,你真的在​​做一個大文件的上傳文件,CopyTo會阻止你的處理,直到它完成爲止

我建議看看這樣的紡紗或者至少查看我列出的異步選項,但您無法真正避免這種情況需要很長一段時間,但您受到文件大小和可用上傳帶寬的限制。當在本地工作時 CopyTo是亞秒。我測試了一半gig文件,並且一個快速秒錶類返回了800毫秒的處理時間。

0

如果沒有.NET 4.0使用本

static void CopyTo(Stream fromStream, Stream destination, int bufferSize) 
    { 
     int num; 
     byte[] buffer = new byte[bufferSize]; 
     while ((num = fromStream.Read(buffer, 0, buffer.Length)) != 0) 
     { 
     destination.Write(buffer, 0, num); 
     } 
    } 
相關問題