組み込みの Web サービスを通じて SharePoint にファイルをアップロードする

StackOverflow https://stackoverflow.com/questions/31868

  •  09-06-2019
  •  | 
  •  

質問

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

最初の 2 つの回答に従ってください...

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

  • WebDAV 方式も有効ですが、Web サービス統合方式と一貫性を保つことを好みます。

ファイルをアップロードするための Web サービスもあり、手間はかかりますが、常に機能します。

「コピー」サービスのことですか?私たちはこのサービスで成功を収めてきました CopyIntoItems 方法。これは、WSS Web サービス API のみを使用してドキュメント ライブラリにファイルをアップロードする場合に推奨される方法ですか?

コードを推奨回答として投稿しました。

役に立ちましたか?

解決

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

他のヒント

もう 1 つのオプションは、プレーンな 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 サービス呼び出しのパラメータとして渡されるため、ドキュメントのサイズが制限されます。(見る 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 サービスはサーバーにインストールする必要があります。サーバーへのアクセスを節約できる可能性があります。
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 ファイルシステム インターフェイス。これは、OS 上で実行されている WindowsClient サービスに依存しており、ポート 80 で実行されている Web サイトでのみ機能するため、プログラムによるソリューションとしては不適切です。ドライブをドキュメント ライブラリにマップし、ファイルのコピーを開始します。

ファイルをアップロードするための Web サービスもあり、手間はかかりますが、常に機能します。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top