2012-11-26 87 views
0

藉助Web服務將文件上傳到Web服務器很容易。這是我一般這樣做的方式。這裏是我的示例代碼。如何開發Web服務(ASMX)上傳文件狀態

[WebMethod] 
public bool UploadFile(string FileName, byte[] buffer, long Offset) 
{ 
bool retVal = false; 
try 
{ 
// setting the file location to be saved in the server. 
// reading from the web.config file 
string FilePath = 
Path.Combine(ConfigurationManager.AppSettings["upload_path"], FileName); 

if (Offset == 0) // new file, create an empty file 
File.Create(FilePath).Close(); 
// open a file stream and write the buffer. 
// Don't open with FileMode.Append because the transfer may wish to 
// start a different point 
using (FileStream fs = new FileStream(FilePath, FileMode.Open, 
FileAccess.ReadWrite, FileShare.Read)) 
{ 
fs.Seek(Offset, SeekOrigin.Begin); 
fs.Write(buffer, 0, buffer.Length); 
} 
retVal = true; 
} 
catch (Exception ex) 
{ 
//sending error to an email id 
common.SendError(ex); 
} 
return retVal; 
} 

,但我想開發Web服務,這將給我的狀態以百分比上傳文件,當文件上傳將隨後完成活動將在客戶端與狀態消息文件是否被完全或不上傳被解僱。我也需要編寫可以同時處理多個請求的例程,並且例程必須是線程安全的。所以請指導我如何設計常規,這將滿足我所有的要求。謝謝

回答

2

我強烈建議您忘記從零開始實現這一點,而是考慮一下現有的客戶端文件上傳解決方案 - 大多數都帶有一些可插入現有應用程序的樣板代碼。

我已經使用了jQuery Upload和plUpload,它們都有可靠的客戶端上傳管理器,可以通過HTTP Range標頭上傳文件並在此過程中提供上傳狀態信息。我相信這兩個都帶有.NET示例。

對於這些類型的上傳處理程序,服務器端的實現涉及接收HTTP數據塊,這些數據塊通過一種上載會話標識進行標識。客戶端發送文件塊,每個文件都由該文件相關的id標識,以及一些進度信息,如字節傳輸和總文件大小以及狀態值,這些值可以表明請求的狀態。該狀態可讓您知道文件何時完全上傳。

然後可以根據從客戶端傳遞的唯一標識將來自POST緩衝區的傳入數據寫入文件或寫入數據庫或某種其他存儲機制。由於客戶端應用程序正在向服務器發送大塊數據,因此它可以提供進度信息。如果您使用像plUpload或jQuery-Upload這樣的客戶端庫,它們將提供可定製的用戶界面。

+0

我需要開發Web服務,因爲Web服務可以從win和web這兩個應用程序中使用。所以我不在尋找jQuery Uploader和plUpload類插件。謝謝 – Thomas