Загрузите файл в SharePoint через встроенные веб-службы

Каков наилучший способ загрузки файла в библиотеку документов на сервере SharePoint через встроенные веб-службы, предоставляемые версией WSS 3.0?

После двух первоначальных ответов …

  • Нам определенно необходимо использовать уровень веб-службы, поскольку мы будем делать эти звонки с удаленных клиентских приложений.

  • Метод WebDAV будет работать для нас, но мы предпочли бы быть совместимыми с методом интеграции веб-сервисов.

Существует также веб-сервис для загрузки файлов, болезненный, но работает все время.

Вы имеете в виду услугу «Копировать»? Мы успешно CopyIntoItems с этим методом CopyIntoItems этой службы. Будет ли это рекомендуемым способом загрузки файла в библиотеки документов, используя только API веб-сервисов WSS?

Я опубликовал наш код в качестве предлагаемого ответа.

Пример использования веб-службы WSS «Копировать» для загрузки документа в библиотеку …

 public static void UploadFile2007(string destinationUrl, byte[] fileData) { // List of desination Urls, Just one in this example. string[] destinationUrls = { Uri.EscapeUriString(destinationUrl) }; // Empty Field Information. This can be populated but not for this example. SharePoint2007CopyService.FieldInformation information = new SharePoint2007CopyService.FieldInformation(); SharePoint2007CopyService.FieldInformation[] info = { information }; // To receive the result Xml. SharePoint2007CopyService.CopyResult[] result; // Create the Copy web service instance configured from the web.config file. SharePoint2007CopyService.CopySoapClient CopyService2007 = new CopySoapClient("CopySoap"); CopyService2007.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; CopyService2007.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Delegation; CopyService2007.CopyIntoItems(destinationUrl, destinationUrls, info, fileData, out result); if (result[0].ErrorCode != SharePoint2007CopyService.CopyErrorCode.Success) { // ... } } 

Другой вариант – использовать простой протокол HTTP HTTP:

 WebClient webclient = new WebClient(); webclient.Credentials = new NetworkCredential(_userName, _password, _domain); webclient.UploadFile(remoteFileURL, "PUT", FilePath); webclient.Dispose(); 

Где remoteFileURL указывает на вашу библиотеку документов SharePoint …

Есть несколько вещей, которые следует учитывать:

  • Copy.CopyIntoItems требуется, чтобы документ уже присутствовал на каком-то сервере . Документ передается как параметр вызова webservice, который ограничивает объем документа. (См. http://social.msdn.microsoft.com/Forums/en-AU/sharepointdevelopment/thread/e4e00092-b312-4d4c-a0d2-1cfc2beb9a6c )
  • метод «http put» (т.е. webdav …) будет помещать документ только в библиотеку, но не задавать значения полей
  • для обновления значений полей вы можете вызывать List.UpdateListItem после «http put»
  • библиотеки документов могут иметь каталоги, вы можете сделать их с помощью «http mkcol»
  • вы можете проверить файлы с помощью List.CheckInFile
  • вы также можете создать собственный веб-сервис, который использует API-интерфейс SPxxx .Net, но этот новый веб-сервис должен быть установлен на сервере. Это может спасти поездки на сервер.
 public static void UploadFile(byte[] fileData) { var copy = new Copy { Url = "http://servername/sitename/_vti_bin/copy.asmx", UseDefaultCredentials = true }; string destinationUrl = "http://servername/sitename/doclibrary/filename"; string[] destinationUrls = {destinationUrl}; var info1 = new FieldInformation { DisplayName = "Title", InternalName = "Title", Type = FieldType.Text, Value = "New Title" }; FieldInformation[] info = {info1}; var copyResult = new CopyResult(); CopyResult[] copyResults = {copyResult}; copy.CopyIntoItems( destinationUrl, destinationUrls, info, fileData, out copyResults); } 

ПРИМЕЧАНИЕ. Изменение 1-го параметра CopyIntoItems на имя файла Path.GetFileName(destinationUrl) приводит к исчезновению сообщения unlink.

Мне повезло с использованием classа оболочки DocLibHelper, описанного здесь: http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html

Из коллектива на работе:

Ленивый способ: ваш интерфейс файловой системы Windows WebDAV. Это плохое как программное решение, потому что оно зависит от службы WindowsClient, работающей на вашей ОС, а также работает только на веб-сайтах, запущенных на порту 80. Соедините диск с библиотекой документов и получите копию файла.

Существует также веб-сервис для загрузки файлов, болезненный, но работает все время.

Я считаю, что вы можете загружать файлы через API FrontPage, но я не знаю никого, кто его действительно использует.

Не уверен, какой именно веб-сервис использовать, но если вы можете использовать DLL SharePoint .NET API, то использование SPList и SPLibrary.Items.Add очень просто.

Interesting Posts
Давайте будем гением компьютера.