Загрузить файл в SharePoint через встроенные веб-сервисы
Как лучше всего загрузить файл в библиотеку документов на сервере SharePoint через встроенные веб-службы, предоставляемые версией WSS 3.0?
После двух первоначальных ответов...
Нам определенно необходимо использовать уровень веб-служб, поскольку мы будем выполнять эти вызовы из удаленных клиентских приложений.
Метод WebDAV будет работать для нас, но мы бы предпочли быть совместимыми с методом интеграции веб-сервисов.
Существует также веб-сервис для загрузки файлов, болезненно, но работает постоянно.
Вы имеете в виду услугу "Копировать"? Мы были успешны с этой услугой CopyIntoItems
метод. Будет ли это рекомендуемым способом загрузки файла в библиотеки документов с использованием только API веб-службы WSS?
Я разместил наш код в качестве предлагаемого ответа.
7 ответов
Пример использования веб-службы "Копировать" 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 PUT:
WebClient webclient = new WebClient();
webclient.Credentials = new NetworkCredential(_userName, _password, _domain);
webclient.UploadFile(remoteFileURL, "PUT", FilePath);
webclient.Dispose();
Где remoteFileURL указывает на вашу библиотеку документов SharePoint...
Есть несколько вещей для рассмотрения:
- Copy.CopyIntoItems
требует, чтобы документ уже присутствовал на каком-либо сервере. Документ передается как параметр вызова веб-службы, который ограничивает размер документа. (См. http://social.msdn.microsoft.com/Forums/en-AU/sharepointdevelopment/thread/e4e00092-b312-4d4c-a0d2-1cfc2beb9a6c) - метод http put (т.е. webdav...) будет только помещать документ в библиотеку, но не устанавливать значения полей
- чтобы обновить значения полей, вы можете вызвать Lists.UpdateListItem после 'http put'
- библиотеки документов могут иметь каталоги, вы можете сделать их с помощью 'http mkcol'
- Вы можете проверить файлы с Lists.CheckInFile
- Вы также можете создать пользовательский веб-сервис, который использует SPxxx .Net API, но этот новый веб-сервис должен быть установлен на сервере. Это может сохранить поездки на сервер.
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)
, заставляет сообщение отмены связи исчезнуть.
Мне повезло, используя класс-оболочку DocLibHelper, описанный здесь: http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html
Не уверен, какой именно веб-сервис использовать, но если вы можете использовать DLL-библиотеки SharePoint .NET, то использовать SPList и SPLibrary.Items.Add очень просто.
Из колледжа на работе:
Ленивый путь: интерфейс вашей файловой системы Windows WebDAV. Это плохое программное решение, поскольку оно опирается на службу WindowsClient, работающую в вашей ОС, а также работает только на веб-сайтах, работающих на порту 80. Подключите диск к библиотеке документов и получите возможность копирования файлов.
Существует также веб-сервис для загрузки файлов, болезненно, но работает постоянно.
Я полагаю, что вы можете загружать файлы через API FrontPage, но я не знаю никого, кто бы его использовал.