2

クライアントがファイル サーバーにファイルをアップロードできる REST Web サービスを作成しようとしています。ガイダンスのために参照できる例または有用なリンクはありますか?

利用可能な ADO.NET データ サービスを使用した POST 操作の例はあまり見たことがありません。

4

2 に答える 2

2

POST を使用して ADO.NET データ サービスにファイルをアップロードしましたが、それが推奨される方法かどうかはわかりません。私が行った方法は次のとおりです。

データサービスでは、UploadFile というサービス操作を実装しました (POST 呼び出しに対応するために WebInvoke 属性を使用します)。

[WebInvoke]
public void UploadFile()
{
   var request = HttpContext.Current.Request;

   for (int i = 0; i < request.Files.Count; i++)
   {
       var file = request.Files[i];
       var inputValues = new byte[file.ContentLength];

       using (var requestStream = file.InputStream)
       {
           requestStream.Read(inputValues, 0, file.ContentLength);
       }

       File.WriteAllBytes(@"c:\temp\" + file.FileName, inputValues);
   }
}

次に、クライアント側で、次を使用してデータ サービスを呼び出します。

var urlString = "http://localhost/TestDataServicePost/CustomDataService.svc/UploadFile";
var webClient = new WebClient();
webClient.UploadFile(urlString, "POST", @"C:\temp\test.txt");

これは、WebClient を使用して、ファイル データを HttpRequest.Files コレクションに配置し、コンテンツ タイプを設定するファイルをアップロードします。ファイルへのパスを使用して webClient がファイルを読み取るのではなく、ファイルの内容を自分で (たとえば、Asp FileUpload コントロールから) 送信したい場合は、この投稿で行ったのと同様の方法で WebRequest を使用できます。使用する代わりに

FileStream fileStream = new FileStream(uploadfile, 
                                FileMode.Open, FileAccess.Read);

渡すバイト配列を使用できます。

これが役立つことを願っています。

于 2009-12-04T06:59:11.347 に答える
1

これをファイル サーバー自体に対して直接実行する方法は 100% わかりませんが、ADO.Net Data Services はデータベースに似たものを確実にサポートしています。以下のコードは、ファイルをデータベースに入れるという同様の目標をどのように達成したかを示しています。どれだけ役立つかは定かではありませんが、

var myDocumentRepositoryUri = new Uri("uri here");
var dataContext = new FileRepositoryEntities(myDocumentRepositoryUri);
var myFile = new FileItem();
myfile.Filename = "upload.dat";
myFile.Data = new byte[1000]; // or put whatever file data you want to here
dataContext.AddToFileItem(myFile);
dataContext.SaveChanges();

注: このコードでは、Entity Framework を使用して FileItem (データベース テーブルをオブジェクトとして表現したもの) を作成し、そのデータを保存しています。

于 2009-11-11T22:52:27.617 に答える