0

Webサービスを利用してファイルをWebサーバーにアップロードするのは簡単です。これは私が一般的に行う方法です。これが私のサンプルコードです。

[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サービスを開発したいのですが、ファイルのアップロードが完了すると、ファイルが完全にアップロードされたかどうかに関係なく、クライアント側でイベントが発生し、ステータスメッセージが表示されます。また、複数のリクエストを同時に処理できるルーチンを作成する必要があります。また、ルーチンはスレッドセーフである必要があります。だから、私の必要なポイントをすべて満たすルーチンを設計する方法を教えてください。ありがとう

4

1 に答える 1

2

これを最初から実装することを忘れて、代わりに利用可能な既存のクライアント ファイル アップロード ソリューションの 1 つを調べることを強くお勧めします。ほとんどのソリューションには、既存のアプリケーションにプラグインできるボイラープレート .NET コードが付属しています。

私は jQuery Upload と plUpload を使用しました。どちらも、HTTP Range ヘッダーを介してファイルをアップロードし、その過程でアップロード ステータス情報を提供する堅実なクライアント側アップロード マネージャーを備えています。どちらにも .NET の例が付属していると思います。

これらのタイプのアップロード ハンドラーのサーバー側の実装には、一種のアップロード セッション ID によって識別されるデータの HTTP チャンクの受信が含まれます。クライアントはファイルのチャンクを送信します。各ファイルは、このファイル関連 ID と、転送されたバイト数や合計ファイル サイズなどの進捗情報、および要求のステータスを示すステータス値によって識別されます。ステータスは、ファイルが完全にアップロードされたことを示します。

POST バッファからの受信データは、クライアントから渡された一意の ID に基づいて、ファイル、データベース、またはその他のストレージ メカニズムに書き込むことができます。クライアント アプリケーションはデータのチャンクをサーバーに送信しているため、進行状況の情報を提供できます。plUpload や jQuery-Upload などのクライアント ライブラリを使用すると、カスタマイズ可能な UI が提供されます。

于 2012-11-26T08:29:17.850 に答える