2

我正在尝试编写 REST Web 服务,我们的客户可以通过它在我们的文件服务器上上传文件。是否有示例或任何有用的链接可供我参考以获取任何指导?

我还没有看到很多使用可用 ADO.NET 数据服务进行 POST 操作的示例。

4

2 回答 2

2

我已经使用 POST 将文件上传到 ADO.NET 数据服务,但我不确定这是否是推荐的方法。我的做法是:

在数据服务上,我实现了一个名为 UploadFile 的服务操作(使用 WebInvoke 属性,以便它满足 POST 调用):

[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 集合中并设置内容类型。如果您希望自己发送文件的内容(例如,从 Asp FileUpload 控件)而不是 webClient 使用文件的路径读取文件,您可以使用类似于本文中的方式的WebRequest。虽然不是使用

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

您可以使用传入的字节数组。

我希望这有帮助。

于 2009-12-04T06:59:11.347 回答
1

我不是 100% 确定如何直接对文件服务器执行此操作,但 ADO.Net 数据服务肯定支持类似于数据库的东西。下面的代码是如何实现将文件放入数据库的类似目标的。不知道这会有多大帮助,但是

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();

注意:此代码还使用实体框架来创建 FileItem(将数据库表表示为对象)并保存该数据。

于 2009-11-11T22:52:27.617 回答