Frage

Was ist der beste Weg, eine Datei über die integrierten Webdienste, die Version WSS 3.0 bereitstellt, in eine Dokumentbibliothek auf einem SharePoint-Server hochzuladen?

Nach den beiden ersten Antworten ...

  • Wir müssen unbedingt die Web-Service-Schicht verwenden, da wir diese Aufrufe von Remote-Client-Anwendungen aus tätigen.

  • Die WebDAV-Methode würde für uns funktionieren, wir würden jedoch lieber mit der Webservice-Integrationsmethode konsistent bleiben.

Es gibt außerdem einen Webdienst zum Hochladen von Dateien, der zwar mühsam ist, aber immer funktioniert.

Beziehen Sie sich auf den Dienst „Kopieren“?Wir waren mit diesem Service erfolgreich CopyIntoItems Methode.Wäre dies die empfohlene Methode zum Hochladen einer Datei in Dokumentbibliotheken, indem nur die WSS-Webdienst-API verwendet wird?

Ich habe unseren Code als Antwortvorschlag gepostet.

War es hilfreich?

Lösung

Beispiel für die Verwendung des WSS-Webdienstes „Copy“ zum Hochladen eines Dokuments in eine Bibliothek ...

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

Andere Tipps

Eine andere Möglichkeit besteht darin, den einfachen alten HTTP PUT zu verwenden:

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

Wobei remoteFileURL auf Ihre SharePoint-Dokumentbibliothek verweist ...

Es gibt ein paar Dinge zu beachten:

  • Copy.CopyIntoItems Das Dokument muss bereits auf einem Server vorhanden sein.Das Dokument wird als Parameter des Webservice-Aufrufs übergeben, wodurch die Größe des Dokuments begrenzt wird.(Sehen http://social.msdn.microsoft.com/Forums/en-AU/sharepointdevelopment/thread/e4e00092-b312-4d4c-a0d2-1cfc2beb9a6c)
  • Die Methode „http put“ (z. B. webdav...) stellt das Dokument nur in die Bibliothek ein, legt jedoch keine Feldwerte fest
  • Um Feldwerte zu aktualisieren, können Sie Lists.UpdateListItem nach dem „http put“ aufrufen.
  • Dokumentbibliotheken können Verzeichnisse haben, Sie können sie mit „http mkcol“ erstellen.
  • Möglicherweise möchten Sie Dateien mit Lists.CheckInFile einchecken
  • Sie können auch einen benutzerdefinierten Webservice erstellen, der die SPxxx .Net-API verwendet, dieser neue Webservice muss jedoch auf dem Server installiert werden.Dies könnte Fahrten zum Server ersparen.
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);
}

NOTIZ: Ändern des 1. Parameters von CopyIntoItems zum Dateinamen, Path.GetFileName(destinationUrl), lässt die Unlink-Meldung verschwinden.

Ich hatte viel Glück mit der hier beschriebenen DocLibHelper-Wrapper-Klasse: http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html

Von einem Arbeitskollegen:

Fauler Weg:Ihre Windows-WebDAV-Dateisystemschnittstelle.Als programmgesteuerte Lösung ist es schlecht, da es auf dem WindowsClient-Dienst basiert, der auf Ihrem Betriebssystem ausgeführt wird, und außerdem nur auf Websites funktioniert, die auf Port 80 ausgeführt werden.Ordnen Sie der Dokumentbibliothek ein Laufwerk zu und beginnen Sie mit dem Kopieren der Datei.

Es gibt außerdem einen Webdienst zum Hochladen von Dateien, der zwar mühsam ist, aber immer funktioniert.

Ich glaube, dass Sie Dateien über die FrontPage-API hochladen können, aber ich kenne niemanden, der sie tatsächlich verwendet.

Sie wissen nicht genau, welchen Webdienst Sie verwenden sollen, aber wenn Sie in der Lage sind, die SharePoint .NET-API-DLLs zu verwenden, ist die Verwendung von SPList und SPLibrary.Items.Add wirklich einfach.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top