31

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

在最初的两个答案之后...

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

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

还有一个上传文件的网络服务,虽然很痛苦,但一直都在工作。

您指的是“复制”服务吗?我们已经成功地使用了这项服务的CopyIntoItems方法。这是仅使用 WSS Web 服务 API 将文件上传到文档库的推荐方法吗?

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

4

7 回答 7

17

使用 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)
    {
        // ...
    }
}
于 2008-08-29T09:44:37.397 回答
9

另一种选择是使用普通的 ol' HTTP PUT:

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

remoteFileURL 指向您的 SharePoint 文档库的位置...

于 2008-09-04T22:48:48.540 回答
8

有几件事需要考虑:

  • Copy.CopyIntoItems需要文档已经存在于某个服务器上。文档作为 web 服务调用的参数传递,这将限制文档的大小。(参见http://social.msdn.microsoft.com/Forums/en-AU/sharepointdevelopment/thread/e4e00092-b312-4d4c-a0d2-1cfc2beb9a6c
  • 'http put' 方法(即 webdav...)只会将文档放入库中,但不会设置字段值
  • 要更新字段值,您可以在“http put”之后调用 Lists.UpdateListItem
  • 文档库可以有目录,您可以使用“http mkcol”创建它们
  • 您可能需要使用 Lists.CheckInFile 签入文件
  • 您还可以创建使用 SPxxx .Net API 的自定义 Web 服务,但必须在服务器上安装新的 Web 服务。它可以节省前往服务器的行程。
于 2008-09-06T02:03:10.043 回答
6
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)会使取消链接消息消失。

于 2010-09-21T19:13:54.893 回答
4

使用此处描述的 DocLibHelper 包装器类我很幸运:http: //geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html

于 2008-08-30T02:14:02.153 回答
1

来自同事的工作:

懒惰的方式:你的 Windows WebDAV 文件系统接口。它作为一种编程解决方案很糟糕,因为它依赖于在您的操作系统上运行的 WindowsClient 服务,并且也仅适用于在端口 80 上运行的网站。将驱动器映射到文档库并进行文件复制。

还有一个上传文件的网络服务,虽然很痛苦,但一直都在工作。

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

于 2008-08-28T14:59:12.560 回答
1

不确定要使用哪个 Web 服务,但如果您可以使用 SharePoint .NET API Dll,那么使用 SPList 和 SPLibrary.Items.Add 真的很容易。

于 2008-08-28T22:48:39.233 回答