2009-11-09 81 views
2

我想寫REST Web服務,通​​過它我們的客戶可以上傳文件,我們的文件服務器上。是否有一個例子或任何有用的鏈接,我可以參考任何指導?ADO.NET數據服務 - 上傳文件

我還沒有看到利用現有的ADO.NET數據服務POST操作的例子很多。

回答

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(一個數據庫表表示爲對象),並保存這些數據。

2

雖然我不知道它是否是推薦的方法,我用POST上傳文件到ADO.NET DataService的。我去它的方式是:

在我實現所謂UploadFile服務操作DataService在(使用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"); 

這將使用Web客戶端上傳哪個地方HttpRequest.Files集合中的文件數據和設置內容類型的文件。如果您更願意發送文件自己(例如,從ASP FileUpload控件)的內容,而不是Web客戶端閱讀使用文件路徑的文件時,您可以使用類似於它在this郵政做的方式的WebRequest。雖然不是使用

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

你可以使用

您在傳遞一個字節數組中。我希望這有助於。