通过内置的Web服务将file upload到SharePoint

通过WSS 3.0版本的内置Web服务将文件上载到SharePoint服务器上的文档库的最佳方法是什么?

继两个最初的答案之后…

  • 我们肯定需要使用Web服务层,因为我们将从远程客户端应用程序进行这些调用。

  • WebDAV方法适用于我们,但我们宁愿与Web服务集成方法保持一致。

另外还有一个web服务来上传文件,痛苦但是一直工作。

你是指“复制”服务? 我们已经成功使用这个服务的CopyIntoItems方法。 这是仅使用WSS Web服务API将file upload到文档库的推荐方法吗?

我已经发布了我们的代码作为build议的答案。

使用WSS“复制”Web服务将文档上载到库中的示例…

 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) { // ... } } 

另一个select是使用普通的ol HTTP PUT:

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

其中remoteFileURL指向您的SharePoint文档库…

有几件事情需要考虑:

  • Copy.CopyIntoItems 需要文档已经存在于某个服务器上 。 该文档作为web服务调用的parameter passing,这将限制文档的大小。 (请参阅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检查文件
  • 您还可以创build使用SPxxx .Net API的自定义Web服务,但是必须在服务器上安装新的Web服务。 它可以节省旅行到服务器。
 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); } 

注意:CopyIntoItems的第一个参数更改为文件名Path.GetFileName(destinationUrl)使得取消链接消息消失。

我已经使用DocLibHelper包装类在这里描述的好运气: http ://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html

从工作中的同事:

懒惰的方式:你的Windows WebDAV文件系统接口。 作为一个程序化的解决scheme是不好的,因为它依赖于你的操作系统上运行的WindowsClient服务,也只能在运行在端口80上的网站上工作。将一个驱动器映射到文档库并获得文件复制。

另外还有一个web服务来上传文件,痛苦但是一直工作。

我相信你可以通过FrontPage API上传文件,但是我不知道谁真正使用它。

不确定要使用哪个Web服务,但是如果您处于可以使用SharePoint .NET API Dll的位置,则使用SPList和SPLibrary.Items.Add非常简单。