31

バージョン WSS 3.0 が公開する組み込みの Web サービスを介して、SharePoint サーバー上のドキュメント ライブラリにファイルをアップロードする最良の方法は何ですか?

2つの最初の回答に続いて...

  • リモート クライアント アプリケーションからこれらの呼び出しを行うため、必ず Web サービス レイヤーを使用する必要があります。

  • WebDAV メソッドは私たちにとってはうまくいきますが、Web サービス統合メソッドとの一貫性を保ちたいと考えています。

さらに、ファイルをアップロードするための 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

もう 1 つのオプションは、単純な 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 ...)は、ドキュメントをライブラリに配置するだけで、フィールド値を設定しません
  • フィールド値を更新するには、「httpput」の後にLists.UpdateListItemを呼び出すことができます。
  • ドキュメントライブラリにはディレクトリを含めることができます。「httpmkcol」を使用して作成できます。
  • 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);
}

注:の第 1 パラメータを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 ファイルシステム インターフェイス。OS で実行されている WindowsClient サービスに依存し、ポート 80 で実行されている Web サイトでしか機能しないため、プログラムによるソリューションとしては不適切です。ドライブをドキュメント ライブラリにマップし、ファイルのコピーを取得します。

さらに、ファイルをアップロードするための Web サービスもあります。面倒ですが、常に機能します。

FrontPage API を介してファイルをアップロードできると思いますが、実際に使用している人を知りません。

于 2008-08-28T14:59:12.560 に答える
1

どの Web サービスを使用すればよいか正確にはわかりませんが、SharePoint .NET API Dll を使用できる立場にある場合は、SPList と SPLibrary.Items.Add を使用するのは非常に簡単です。

于 2008-08-28T22:48:39.233 に答える