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

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

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


person MOZILLA    schedule 09.11.2009    source источник


Ответы (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);

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

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

person James_2195    schedule 04.12.2009

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

person ChrisHDog    schedule 11.11.2009