我正在尝试编写REST Web服务,客户可以通过该服务在我们的文件服务器上上传文件。是否有一个示例或任何有用的链接,我可以参考任何指导?
我没有看到很多使用ADO.NET数据服务的POST操作示例。
答案 0 :(得分:2)
我已经使用POST将文件上传到ADO.NET dataservices,虽然我不确定它是否是推荐的方法。我的方式是:
在dataservice上,我实现了一个名为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,您可以使用类似于{{3中所做的方式的WebRequest发帖。虽然不是使用
FileStream fileStream = new FileStream(uploadfile,
FileMode.Open, FileAccess.Read);
您可以使用传入的字节数组。
我希望这会有所帮助。
答案 1 :(得分: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(将数据库表格表示为对象)并保存该数据。