ADO.NET Data Services - загрузка файлов - PullRequest
2 голосов
/ 09 ноября 2009

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

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

Ответы [ 2 ]

2 голосов
/ 04 декабря 2009

Я загрузил файл на 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");

При этом используется веб-клиент для загрузки файла, который помещает данные файла в коллекцию HttpRequest.Files и устанавливает тип содержимого. Если вы предпочитаете отправлять содержимое файла самостоятельно (например, из элемента управления Asp FileUpload), а не веб-клиенту, читающему файл с использованием пути к файлу, вы можете использовать веб-запрос, аналогичный тому, который выполняется в этот пост. Хотя вместо использования

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...