Службы данных ADO.NET - загрузка файлов

Asked
Viewd1191

2

Я пытаюсь написать веб-службу REST, через которую наши клиенты могут загружать файл на наш файловый сервер.Есть ли пример или какие-либо полезные ссылки, по которым я могу обратиться за советом?

Я не видел много примеров операций POST с использованием доступных служб данных ADO.NET.

2 ответов

2

Я загрузил файл в службу данных ADO.NET с помощью POST, хотя не уверен, рекомендуется ли это. Я поступил следующим образом:

В службе данных я реализовал операцию службы под названием 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), а не веб-клиент, читающий файл, используя путь к файлу, вы можете использовать WebRequest, аналогично тому, как это делается в это сообщение. Хотя вместо использования

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

вы можете использовать массив байтов, который вы передаете.

Надеюсь, это поможет.

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 (представления таблицы базы данных как объекта) и сохранения этих данных.